Laser triangulation system

ABSTRACT

A method for measuring the range to multiple points on a surface by projecting a line of light onto the surface, imaging said line of light onto an XY photodetector array at an oblique angle, reading out the array one line at a time, computing the centroid of said line of light on each Y line across X columns as each line is read out of the array in onboard FPGA (Field Programmable Gate Array) or similar real time logic, computing quality factors for each computed centroid and encoding this as one or more bits in the centroid value, transmitting said tagged centroid to a local or remote data receiver, and computing the range to the surface for each point corresponding to each centroid using a previous calibration step.

RELATED APPLICATION

This application claims the benefit of previously filed Provisional Patent Application No. 60/513,554.

FIELD OF THE INVENTION

The present invention relates to techniques to improve the quality of measurements made with laser triangulation sensors.

The first technique adds quality tags to each data point at the time of acquisition and uses these tags to adjust real time operating settings. These tags can also be used in later processing operations to select high quality data from the complete data set.

The second technique improves the basic accuracy of the sensing system by introducing a known artifact in the field of view that is continuously scanned by all sensors, the data from which is used to continuously adjust the calibration parameters for each sensor and/or provide differential measurements between the artifact and the unknown object.

BACKGROUND OF THE INVENTION

A laser triangulation sensor provides dimensional information about an object placed in the path of a sheet of laser light.

Referring to FIG. 1, a camera placed at an oblique angle to the sheet of light acquires an image showing the location of the laser line on the surface of the object. In a calibrated system the location of a point x,y in the camera image is uniquely associated with the X,Y position of the corresponding point on the surface of the object. In a typical system there are several hundred points on each laser line corresponding to the number of video lines in the camera. If the sensor system or object is translated in a controlled manner, then a complete profile of the surface of the object can be assembled from successive line scans.

The laser light sheet and the camera axis form two sides of a triangle, the third being the baseline between the laser and the camera—hence the term Triangulation Sensor.

The laser sheet may be formed by rapidly translating a single spot with a moving mirror, or using cylindrical optics in the laser path to spread the beam in one direction to form a line. The first, dynamic system, has the advantage of high incident laser power in a single spot, but suffers form mechanical complexity, whereas the second, static configuration, has no moving parts but can suffer from lack of incident laser power as the beam is spread over a long line and the inability to dynamically modify the intensity of laser power along the laser line.

In either configuration, the camera image of the laser on each video line comprises an intensity profile as shown in FIG. 1. Typically this profile has a base width of 6 to 20 pixels and a height of ⅓ to full scale. The centroid of this intensity profile is the ‘x’ value of the x,y coordinate, the ‘y’ value is the number of the video line on which we are operating on. Numerous techniques exist for calculating the ‘centroid’ of the laser line, including simple ½ threshold, multiple thresholds, area calculation and differentiation followed by zero crossing detection.

In all cases, some or all of the following conditions regarding the form of the pulse are assumed to be valid—

-   -   It is not clipped at peak height     -   It is symmetric     -   It has reasonable amplitude above any noise or background     -   It is not overly wide or narrow

If these conditions are met, then the accuracy in determining x, the centroid, can be {fraction (1/16)}^(th) pixel or better before other considerations such as speckle noise, system opto-mechanical stability, and calibration accuracy begin to be more dominant sources of error. However, if one or more of these conditions are not met, then system resolution and accuracy start to degrade in an indeterminate manner.

The two dominant dynamic conditions that affect system performance are the presence of clipping of the peak and inadequate signal amplitude above the background. The first is generally caused by too high an exposure for the surface and the other too low. The extent of this problem is several orders of magnitude as described in U.S. Pat. No. 5,811,827, issued Sep. 22, 1998, to Pryor et al., which is incorporated herein by reference as though fully set forth.

The problem can be simply stated as the system exposure should be such that the centroid peak falls within acceptable levels.

This is not a severe requirement in a dynamic laser triangulation system as the intensity of the reflected laser spot can be continually monitored and the incident laser power varied in a closed servo manner to maintain more or less constant peak heights. Fast response control circuits are required and there will always be some residual step response error if the surface exhibits abrupt reflectance or range changes.

In contrast, a static laser triangulation system has a basic limitation in that the intensity of the laser cannot be varied along the line length, only temporally for the whole line from scan to scan. It is thus impossible to provide optimum exposure conditions for many real objects at all points along the line and compromises or multiple exposures are required.

To our knowledge, current system designs do not address this issue. There are discussions about optimising system setup for best response, minimising spot size to avoid the effect of reflectance changes, providing large dynamic response detectors and post processing of Point Cloud data to remove outliers and erroneous data points, but no attempt to address the fundamental exposure problem.

Current static systems deliver centroid data when some or all of the error sources listed above are present and there are no cues provided to alert the user that the data may be suspect.

Laser Triangulation sensors measure the range between the face of the laser and the object—one side of the triangle formed by the laser sheet, the camera to laser baseline, and the line from the camera to the object (see FIG. 1).

The inherent accuracy of the system is a percentage of the range reading, not a percentage of the Field of View.

Typical systems have an appreciable standoff between the laser and the start of the field of view—see FIG. 1—with the result that the range value is often quite large in relation to the actual feature on the object.

For instance, we may be measuring the height of a rib on a cast object with a nominal value of 0.2″ from a distance of 4″. If the system has an accuracy of say +/−0.1% of full scale, then this is 4/1000=+/−0.004″. For the 0.2″ rib height that we are actually measuring, this is 0.004/0.2 or 2% of the feature.

This problem is even more apparent where we wish to make differential measurements between the range readings of two or more sensors. A very typical application of triangulation sensors is web thickness gaging where one sensor measures the range to the top of a web and another to the bottom as shown below. The web thickness is calculated as the difference between the two sensor readings. Typical installations might have a sensor standoff of 10″ to measure a web thickness of 0.1″. Again with +/−0.1″ full scale accuracy, the range error is +/−0.010″ per sensor for a total possible web thickness error of +/−0.020″, or 0.02/0.1=+/−20%.

Another example is the gaging of railroad tracks. In this example, two sensors are mounted underneath a moving railroad car each measuring the inside face of one of the rails (see FIG. 6). The sensors provide profile information for each rail in the form of range information from the sensor face to the rail. In a subsequent processing operation, the gage, or distance between the two rail crowns, is calculated. This calculation involves some filtering and curve fitting of the range data to produce clean profiles at known absolute positions based on the sensor locations. The difference between these two positions is then the required gage distance. The desired accuracy of gage measurement is typically +/−0.020″. It is very advantageous to perform these gage measurements at intervals of 1 foot of track length and at operating train speeds from 60 to 150 mph to assess the effect of dynamic loading on the track, as well as to increase the overall speed of gage measurements. As the railroad car moves, the sensors are subject to intermittent vibration levels exceeding several times the force of gravity. In order to protect the sensitive optics and mechanics, the sensors are typically fitted with shock mounts, both internally and externally. These shock mounts permit a certain amount of movement by design which compromises the accuracy of the gage measurement. One solution is to mount both sensors on a rigid structure and shock mount this but this is not practical in many installations. An alternative approach is to add a known artifact in the field of view of each sensor and ensure that these artifacts do not move in relation to each other.

A final example is one where we wish to gage the depth of corrosion on or departure from true form of a surface—say a flat sheet or curved surface such as a pipe. One approach is to mount the sensor on a rigid track (linear or circular as appropriate) that provides a solid reference position as the sensor is moved across the surface (see U.S. Pat. No. 5,362,962, issued Nov. 8, 1994, to Barborak et al., and incorporated herein by reference as though fully set forth). There are two drawbacks to this—the measurement accuracy is dependent on the full range distance between the sensor and the surface, and the accuracy is also affected by the precision of the rigid track which then necessarily is quite expensive. An alternative approach is to place an appropriate artifact in the field of view—flat or curved bar—and scan this at the same time as the region of interest. The desired measurement is then the differential between the artifact and the surface measurement and is nominally independent of the distance of the sensor from the surface which may then be moved with a relatively non rigid cost effective guiding structure. In an extension to this, the artifact need not itself cover the entire extent of the part under measurement. It can be positioned by an appropriate linear, circular or other form guidance track. The artifact can be very lightweight in comparison to the sensor and no trailing cables or other connections are necessary, so the guidance structure for it can be similarly lightweight in construction whilst still providing the necessary guidance accuracy.

System designers address these issues in several ways:

-   -   Provide rigid support structures for the whole system—expensive         and heavy     -   Ensure the sensors have very good thermal and mechanical         stability—good, but the residual errors still affect the         complete range measurement—similar design practice can be         applied to sensors using artifact correction with even better         results.     -   Add dynamic corrections for thermal effects—e.g. Faro Arm     -   Provide checks of system accuracy by periodic reference to         artifacts nearby—this does not provide for a differential         measurement in real time.

Accordingly, it is an object of the present invention to provide a laser triangulation system that addresses the disadvantages of the prior art discussed above.

SUMMARY OF THE INVENTION BRIEF DESCRIPTION OF THE DRAWINGS

Further features and advantages will be apparent from the following detailed description, given by way of example, of a preferred embodiment taken in conjunction with the accompanying drawings, wherein:

FIG. 1 is a schematic diagram of a laser triangulation system;

FIG. 2 is an aluminum roll-formed part to be measured;

FIG. 3 is untagged centroid measurement data of the part of FIG. 2;

FIG. 4 is tagged centroid measurement data of the part of FIG. 2;

FIG. 5 is a laser triangulation setup for measuring the gage of railroad track;

FIG. 6 is a laser triangulation setup for measuring the gage of railroad track;

FIG. 7 is a graph depicting a method of centroid calculation;

FIG. 8 is a graph depicting a method of centroid calculation;

FIG. 9 is a graph depicting a method of centroid calculation;

FIG. 10 is a graph depicting a method of centroid calculation;

FIG. 11 is a graph depicting a method of centroid calculation;

FIG. 12 is a trace depicting laser line and ambient pulses;

FIG. 13 shows laser line profiles and corresponding differential indicators and gating pulses;

FIG. 14 depicts a right angle Cartesian coordinate system;

FIG. 15 depicts a sensor coordinate system;

FIG. 16 depicts a Hydra USB™ installation;

FIG. 17 shows a graphical Configuration/Installation/Monitoring utility;

FIG. 18 shows a Hydra console style window and text messages for the core and diagnostic application;

FIG. 19 shows a Hydra console style window and text messages for the core and diagnostic application;

FIG. 20 shows a Hydra diagnostic display;

FIG. 21 is a graphical display of the fields of view from all cameras;

FIG. 22 is a Hydra profile capture and playback window;

FIG. 23 is a Hydra HUE-6 control display;

FIG. 24 is a Hydra encoder dialog box;

FIG. 25 is a Hydra encoder dialog box;

FIG. 26 shows sensors configured to examine both sides of a pair of railway rails;

FIG. 27 shows a Hydra profile adjustment dialog box;

FIG. 28 is a graph showing typical readout times;

FIG. 29 shows a client test screen; and

FIG. 30 shows a tachometer.

DETAILED DESCRIPTION WITH REFERENCE TO THE DRAWINGS

Quality Tags

The concept of quality tags attached to each centroid value provides cues to alert a user that the data may be suspect.

These tags are determined as follows.

-   -   In the calculation phase on each video line, extra data is         available to describe the ‘quality’ of the centroid pulse.     -   In its simplest form, this is just whether the pulse height is         within acceptable levels.     -   Other variations of the simple form can measure quality based on         pulse width at the base or half height, total power in the         pulse, or the degree of symmetry present in the pulse.     -   More advanced quality calculations can look at adjacent video         lines and provide the degree of correlation to centroids in the         ‘y’ direction, or identify more than one candidate centroid on         the same line and report these as secondary choices.

The simple quality tags can be encoded in spare bits in the 16 bit centroid data, but the more advanced values require the addition of an extra byte (8 bits).

The quality tags are used in the system in either real time or post acquisition operations.

Real Time Usage

Provide immediate feedback to the user via color coding of the centroid data display. This provides a strong indication of system performance and whether the current exposure settings are set correctly or either too high or two low.

Provide a means to automatically set the system exposure to the optimum setting for acquiring the maximum number of valid data points.

Provide a means to identify and control a range of exposure bands through which the system automatically cycles during successive scans. (see section below—Auto Exposure Banding).

The real time color coding is shown in the examples below. The first image shows the actual part, the 2^(nd) just the raw centroid data, and the third the color coded centroid data.

Auto Exposure Banding

The concept of Auto Banding is a powerful technique that makes full use of the quality tags and ensures that the best data set possible will be acquired within the full dynamic range capabilities of the system.

For most real objects, the optimum scan exposure settings will vary over a wide range as the object is moved in relation to the sensor head, and indeed within each scan line as discussed above. Auto Exposure Banding addresses this problem by defining two or more exposure settings that the system automatically cycles through on successive scan lines. In this manner, the complete data set will contain at least one good data point in close proximity to the desired sample point on the surface, and in many cases more than one good point. Post acquisition filtering based on the quality tags is performed on the complete data set to select the best data point set and/or average good data points around the sample point of interest.

The user provides the initial two or more exposure band settings based on knowledge of the object or a coarse pre-scan operation.

An auto update mode is also available wherein the Host software continually monitors the quality of the data from all exposure bands and adjusts these as necessary to ensure complete coverage of the object with good sample points.

Implementation

The application to railroad track gaging is described.

As shown in the attached figure, a right angle target is located above each rail crown and in the field of view of each sensor. The data from this is returned in the sensor range data with the actual profile data.

The location and orientation of each of the two right angle targets is determined for each scan and a correction made to the gage measurement in the post acquisition processing.

Centroid Calculation

The following describes a new method of calculating the centroid of a pulse from digital binary pixel data. This method requires less resources than that described in U.S. Pat. No. 4,628,469, but still maintains excellent accuracy. The final equation involves only one division and uses only first sums and subtractions and is essentially based on simple integrals. These resource savings make implementation in logic much less costly.

The following details the equation with the example of a fairly symmetrical gaussian pulse. However it can be shown that it is still equally valid as compared to existing equations on asymmetrical pulses. The equation only falls off with pulses that contain cavities.

Background:

-   1) Referring to FIG. 7, one method for calculating the center of a     pulse involves using only a single threshold, y. If the first     x-intercept of the pulse at this threshold is b and the last     x-intercept is a, then the centroid equation is:     C=(a−b)/2+b     -   Which can be re-written as 2c=a+b

Of course this method has the drawback that it is at most 0.5 pixel accurate when dealing with binary pixel data from a camera.

-   2) Referring to FIG. 8, tThe above equation can be extended to N     levels by integrating. However, a peak detector must be used to     locate the x-intercept of the highest point of the pulse. The     highest point determines the upper threshold n and therefore the     upper bound on the integral. The lower threshold can be determined     by several methods such as dynamic thresholding (rolling average     that calculates local thresholds on a per pixel basis). b0=first     x-intercept at threshold0     -   a0=last x-intercept at threshold0     -   bn=first x-intercept at thresholdn     -   an=last x-intercept at thresholdn with an=bn in this diagram.

In FIG. 9 the bb represents the area between the leading edge of the pulse and the peak intercept. The area, bb, is found by summing all the binary pixel values (y values) for the pixels from x=0 to x=bn. Similarly the area aa represents the area between the peak intercept and the trailing edge of the pulse and is found by summing all the binary pixel values (y values) from pixel an to pixel a0. N=upper threshold (yn)−lower threshold (y0)

-   -   i) Referring to FIG. 10, the leading curve of the pulse can then         be defined by the following area         Nbn−bb     -   where bb is the sum of all the binary pixel values (y values)         from x=b0 to bn     -   This corresponds to all the x-intercepts from b0 to bn     -   ii) Similarly, referring to FIG. 11, the trailing curve is         defined by the following area:         Nan+aa

Where aa is the sum of all the binary pixel values (y values) from x=an to a0

-   -   This corresponds to all the x-intercepts from a0 to an

The centroid equation from before for a single intercept was 2c=a+b

Integrating both sides of this equation for N thresholds and substituting the above values gives the result 2cN=Nan+aa+Nbn−bb or 2c=an+bn+(aa−bb)/N where an=bn if the peak is defined as a single point. This equation therefore essentially averages all the discrete centers to determine the final true center. Summary:

-   3) The equation 2c=an+bn+(aa−bb)/N has several advantages over     existing methods.

The final division by 2 is easily accomplished in binary logic by right shifting and therefore has virtually no overhead. As in the method described in U.S. Pat. No. 4,628,469, there is only one main division; in this case by N. The divisor, N, depends only on the binary resolution of each pixel value (typically 8 or 10 bit). In U.S. Pat. No. 4,628,469, the divisor was a first sum of all the binary pixel values in the pulse, which can become quite large depending on the size of the pulse being measured.

Similarly the numerator is much reduced because it only involves first additions and subtractions rather than the potentially very large sum of sums.

The calculation can be readily accomplished at real time. After the lower threshold is exceeded every pixel is subtracted from an accumulator at pixel clock speed as it arrives until the peak x-intercept point is reached. After the peak x-intercept location, the accumulator switches to adding each pixel as it arrives until the lower threshold is crossed. The accumulator then holds the value (aa−bb).

By pipelining the division and posting it to a second logic block, the next (aa−bb) sum can be calculated while the division block is doing the single division necessary to finish the previous (aa−bb)/N calculation. This allows a full line time for doing the division and completing the rest of the calculation and can therefore be implemented in less costly logic.

One attribute of this method that may appear to be detrimental is the requirement that a peak must be found in order to find the x-intercept switch point and place an upper bound on the integral. However, in the context of a real-word system, there is a need to make the lower threshold as low as possible. The lower the value for the lower bound, the more data can be included in the pulse calculation and therefore the greater the sub-pixel accuracy.

Unfortunately reducing the lower threshold can cause background noise or secondary reflections to come into play in a real world system. The peak detector then stands alone as a necessity because it is used as a peak filter to extract the pulse with the highest peak from the forest of surrounding noise. The intent therefore is to drop the lower bound partially into the noise floor to get as much of the pulse data as possible and then apply the peak detector to extract the pulse with the highest peak.

All existing centroid calculation methods are readily applied to cases where the camera provides 1 pixel value per clock cycle in a serial data stream. However some of the newer high speed cameras provide 8 or 10 consecutive pixels from one row in one clock cycle. It becomes extremely difficult to calculate a sum of sums or similar calculation in real time when the data is presented in this method. For example second sums are easily calculated for serial data by a second accumulator that is keeping a running total of the intermediate sums provided by the first accumulator. For parallel data 8× clock speed summing hardware or other very costly hardware is necessary to maintain real time for this method.

However, the new equation presented above uses only first sums and first subtractions and could therefore be realized in much less costly logic and still run real time.

FIG. 13

The positive differential exceed indicator and negative differential exceed indicator are then merged. The merging involves processing to discard obvious rejects and combining to create gating pulses. Obvious rejects are two consecutive positive indicators or two consecutive negative indicators. Once the gating pulses have been created they are passed through the wide feature filter to remove all pulses that exceed the preset width.

The next step is to pass the remaining gated pulses through the differential peak extractor, which will extract the pulse with the largest differential. If there are two pulses of equal differential, then the first will be selected. The final gating pulse is then correlated with the raw binary data for the centroid calculation.

This method is very effective in extracting laser lines from images with a lot of ambient light variability throughout the field of view. For a future implementation with a larger altera, variable spacing between the two windows should be added.

4) Thresholds:

All thresholds are 8 bit. The least significant bits of the incoming 10 bit data stream will be ignored in the initial implementation. Individual manual threshold registers are available for each camera. Setting the appropriate bit switches to auto-threshold mode where these register values become offsets to the auto-threshold value.

AutoThreshold: Referring to FIG. 12, there are currently two variants on the auto-threshold.

-   4.1) Lowest Average 32block—This version averages successive blocks     of 32 pixels on a line and finds the lowest average block value. The     threshold value in the GUI is then added as an offset and the final     value is used as the threshold for the next line. This method works     well when the background has average uniformity or is lowest local     to the laser line. The subsequent peak extraction filter will     extract the largest peak from the surrounding noise. However, if     there is a substantial average background increase local to the     laser line then this method will not find the laser line, because     the wide feature filter may remove it. Referring to FIG. 12, the     second pulse will be detected rather than the taller first pulse. -   4.2) Differential Sliding Window—This method slides two staggered     averaging windows through the pixel data. The current pixel is     compared against the local average values in both these adjacent     windows. The leading window handles negative differentials. The     trailing window handles positive differentials. The windows slide on     a pixel by pixel basis and therefore the average changes locally     thereby essentially calculating local backgrounds. The threshold     value in the GUI is then subtracted from the current pixel value and     the result compared with the two windows. If the current pixel     value>postive window avg+GUI threshold value, then a positive     differential indicator is set. If the current pixel value>negative     window avg+GUI threshold value, then a negative differential     indicator is set. There are three window sizes available in the     current altera (16 pixels, 8 pixels, 4 pixels). 32 pixels was     removed due to lack of altera resources.     2.0 Overview

Laser triangulation systems operate by acquiring a video image of a surface illuminated by a laser line. The location of the laser line in the video image represents the XY location of the surface. It is necessary to extract the centroid of the laser image on each video line to sub pixel resolution. Various algorithms are in use—see U.S. Pat. No. 5,164,579, issued Nov. 17, 1992 to Pryor et al.; U.S. Pat. No. 4,628,469, issued Dec. 9, 1986, to White; U.S. Pat. No. 5,812,269, issued Sep. 22, 1998, to Svetkoff et al., and Blais, Rioux, (zero crossing), all of which are incorporated herein by reference as though fully set forth, and which offer compromises between speed of execution and accuracy. All depend on a good quality video signal. The quality is dependent on:

-   -   incident laser light—power and x-beam symmetry     -   f/# of gathering optics to minimise speckle     -   surface quality—reflectance, angle, roughness     -   size of incident laser spot or line—minimise macro changes,         maximise accuracy, maximise resolution.

During system operation, the surface properties (reflectance, roughness, tilt) typically vary within each scene or over the extent of the part under measurement. If there is too much signal return, then the signal is clipped at the peak and the centroid accuracy is compromised. Conversely, given too low a signal, the centroid is either not detected or the centroid calculation is based on a laser image a few pixels wide at low amplitude providing very poor accuracy.

Two typical applications illustrate the difficulty:

-   -   In a continuous inspection system profiling a complex extruded         part, the near vertices may be over exposed and the far field in         a dark crevice may be underexposed—there is no good compromise         for exposure setting that provides good accuracy in the near         field and adequate signal in the far field—the image is either         under or over exposed.     -   In a single part measurement, the surface color may change from         very light to a dark absorbing finish. The exposure time must be         adjusted to get good data in each instance.

There are two optimisation problems—one intrascene and one over time over many scenes.

This creates difficulty in system setup—a problem unique to static laser line generator systems. Flying spot scanners such as the Steinbichler Comet use feedback control to control the intensity of each scanned point.

There are currently no known systems operating with real time feedback of ‘centroid quality’. The only known system with some capability in this regard is the Romer Arm sensor with color feedback in the centroid display to show signal amplitude to the user.

There is then a real requirement to determine the quality of the data for each point and use this data in a useful manner for system configuration in a dynamic fashion.

3.0 Centroid Generation

The centroid represents the sub pixel location of the laser line along each video line. The current implementation is based on a 640 pixel×480 line resolution camera and {fraction (1/16)}^(th) of a pixel resolution. Hence, the maximum centroid value possible is 640×16=10240 which can be contained within a 14 bit word—16,384—leaving 2 bits available for some form of tag. If this is not deemed adequate, then a full 24 bit centroid ‘word’ is required to provide the base 14 bit centroid and an additional 10 bits of quality or tag data.

The implementation of centroid quality begins with the technique employed to calculate the centroid value from the raw video image. Document 2105—Centroid Extraction Possibilities—discusses the techniques in use now in the Hydra USB Scanners. These are based on digital processing of the video data on a line by line basis in the FPGA logic in the sensor head.

The basic algorithm is based on a center of mass calculation as described in U.S. Pat. No. 4,628,469, with actual implementation using a different algorithm to improve calculation speed—see appendix I.

The FPGA performs a number of pre processing steps as described in the Appendix and summarised below: Process Operation Application Min feature Discards small features - Filters out noise due width rejection either black or white to dust below a user specified removes effect of bad width - typically 1 or pixels 2 pixels Max feature Discards features wider Rejects ambient light rejection than a certain width - artifacts, windows etc typically 30 pixels Dynamic Adjusts background Compensates for threshold threshold level on a variable background moving average basis lighting Peak Amplitude Detects maximum signal Identifies best Detect level on each line - or candidate for a valid returns first saturated centroid region - Max Power Detect Detects peak with Identifies best maximum power level on candidate for a valid each line centroid

The video data on each video line is then operated on to calculate the centroid value. In addition to the actual centroid value, various other parameters can be calculated as a measure of Centroid Quality.

Centroid Quality Criteria

These criteria are used as a measure of the centroid quality and are intended for use in the processing path.

One of the basic criteria can be encoded into the 2 bits available in the basic 16 bit centroid.

If more than one of the basic criteria is required, or the extended criteria, then an extra byte must be assigned to the centroid—three bytes total.

The criteria can be categorised as:

-   Basic: Simple tags useful for quality and real time power servo     control -   Extended: More complex for use in filtering data from multiple scans     and/or multiple sensors.     1.1.1 Amplitude

This returns the amplitude of the peak of the centroid.

This can be encoded into 2 bits by defining 2 levels in addition to the threshold level within the 0-255 range.

This is the simplest criteria to calculate but is subject to error in the presence of noise spikes. The min feature pre-processor is intended to remove such spikes prior to centroid detection.

In a typical system the levels can be defined as: Level Name 11 Threshold 60 Min 200 Max

with corresponding tags assigned to any located centroids as follows: Tag (2 bit) Name Associated Criteria Comments 00 Weak Peak < Min Accuracy may be suspect 01 Good Min < Peak < Max Optimum 10 Strong Max < Peak < MAX_(—) Should reduce exposure DEF 11 Saturated 255 < MAX_DEF Over exposed, accuracy is suspect

This is the currently implemented Tag implementation.

1.1.2 Base Width

This returns the width at the threshold height of the centroid. It is filtered in the pre processor section to pass widths between the min and max feature settings.

If we assume a uniform laser beam, then this is a reasonable indication of centroid quality.

In a typical system the widths could be defined as: Width Name 3 Low 6 Min 12 Max 20 Sat

with corresponding tags assigned to any located centroids as follows: Tag (2 bit) Name Associated Criteria Comments 00 Thin Width < Low Accuracy may be suspect 01 Narrow Low < Width < Min OK 10 Optimum Min < Width < Max Optimum 11 Wide Max < Width < Sat Should reduce exposure 1.1.3 Symmetry

This returns a measure of the symmetry of the beam about the detected peak. It is useful as a criterion for selecting points where there is extreme slope or the spot straddles an edge.

It is calculated as the difference between the mid point of the base and the centroid.

This is a reasonably simple criterion to calculate.

In a typical system the differences could be defined as: Diff Name 2 Typical 4 Acceptable

with corresponding tags assigned to any located centroids as follows: Tag (2 bit) Name Associated Criteria Comments 00 Good Diff < Typical Symmetric - good 01 OK Typical < Diff < Acceptable OK - within limits for laser beam 10 Skewed Acceptable < Diff Skewed by surface feature - suspect 11 1.1.4 HPBW—Half Power Band Width

This returns the width at the half peak height of the centroid. It is a parameter commonly used to define optical bandpass filters.

This is not an easy criteria to calculate as the peak height must first be determined, the half height, and then the width at about this point.

In a typical system the levels could be defined as: Level Name 1 Low 2 Min 4 Max 8 Sat

with corresponding tags assigned to any located centroids as follows: Tag (2 bit) Name Associated Criteria Comments 00 Thin Width < Low Accuracy may be suspect 01 Narrow Low < Width < Min OK 10 Optimum Min < Width < Max Optimum 11 Wide Max < Width < Sat Should reduce exposure Non Real Time Processing

The Host system can add some additional attributes to the centroid data stream based on the degree of continuity from video line to video line.

The input data stream is examined for centroid continuity across several user selected lines for centroids that exist within a user selected band of previous and next line values. This is useful to filter out single or double outliers for instance.

4.0 Usage—Real Time

The real time uses consist of providing immediate feedback to the user to aid in setting up the system, and providing control inputs to automatic exposure and ranging algorithms operating in the system firmware and FPGA logic.

Display Attributes

This is the simplest use and can be exploited in several ways:

1.1.5 Color Coding

The individual points in the Diagnostic Centroid display are color coded with typically Blue indicating a low peak, Orange and Green mid to high range, and Red saturated data.

1.1.6 Display Blanking

Individual points in the Centroid data are not displayed if these fall outside user specified levels.

Auto Exposure

The camera exposures and gain are adjusted by the Host software to provide the best aggregate laser line response across the whole active window.

In the case of relatively uniform targets, there is typically an operating point (exposure and gain settings) which provides good data from all points illuminated by the laser line.

In the case of targets that show varying color, range, occlusions etc. any one setting cannot provide good results for all points. There is always a compromise to be made.

This is analogous to photography with an automatic camera where there are light and dark regions in the scene. The auto exposure system either provides the best compromise, or is instructed to use only a specific region for exposure setting, or the user disables the auto exposure feature and sets it manually, typically also taking additional exposures at a range of exposures around the ‘first choice’ to ensure at least one good shot.

Auto Banding

Auto Banding is a more sophisticated technique intended to exploit the nature of the profiling operation and maximise the quality of the data from the whole surface. Given that most real surfaces produce a wide range of reflected signal intensities, there is no one operating point, even for a single profile, that can provide the best data.

Auto Banding provides a means to ensure that a sufficient number of points on the surface are scanned at or close to their optimum operating point for good range measurement. Other points on the same scan may not be optimally exposed but the presence of quality tags allows these to be rejected in the surface reconstruction phase.

In the surface reconstruction process, all the data is assembled either as uniformly spaced planes or a cloud of XYZ data points, and combined in some form of triangulation process to produce a surface. If these input data points are ‘tagged’ with a quality factor such that only the best or valid points are included in the reconstruction process, then the resulting surface should be more accurate and complete.

Auto Banding provides the means to ensure that during data acquisition the full range of operating points are used to ensure that all points on the surface are sampled with close to optimum settings. This is in fact a form of oversampling, with the addition of quality tags so that an informed decision can be made as to which points are the most valid.

The technique can be used in its basic form, or with the addition of auto update to continuously adapt to varying surface conditions.

This technique is implemented in the following fashion:

-   -   The user sets the min and max operating points based on         knowledge of the surface to be scanned, or a pre-scan.     -   The system selects operating points between these two extremes         for a total of three or four points including the max and min         typically, or if the points are at extreme separation the user         can override the selection of these.     -   The system then operates online in profiling mode and         automatically moves the operating point in successive scans         through the range of operating points in round robin fashion.     -   In auto update mode, the system examines the data quality from         all scans and adjusts the operating points using logic as         follows:         -   For the lowest exposure*gain operating point, if there are             overexposed points (beyond a user specified minimum), then             the operating point is moved to a lower setting.         -   For the highest exposure*gain operating point, if there are             under exposed points, then the operating point is moved to a             higher setting.         -   Intermediate operating points are then adjusted to be             uniformly spaced between the extremes.             5.0 Usage—Post Acquisition             Data Filtering

Data filtering is simply discarding points from the data set that are tagged outside the two central tag bands. It is useful when reconstructing complete surfaces from multiple scans.

Data Selection

Data selection is applicable when two or more scans are overlapped, or close to overlapped. The same region on the surface will have been sampled by one or more sensors or cameras. If these sensors or cameras have different angles of view or spot size, then any differences in the quality of the data may not show in the base tags, but could be noticeable in the extended tags—for instance when measuring an inclined surface from two orthogonal directions (centroid symmetry), or moving over an edge with different spot sizes (centroid symmetry).

The reconstruction software can apply Data Selection based on the extended tag to select the best data point to use for that region.

HYDRA USB™

The following section is a reference for installation and use of the Hydra USB™ profiling system, (3DM Devices Inc., 7-3347-262^(nd) Street, Aldergrove, BC, Canada, V4W 3V9) which is described as an example of a preferred embodiment and application of the invention. This section describes the components and functionality common to all variants of the Hydra USB™ system. Terminology Alignment Software based procedure performed on site wherein the sensor coordinate systems are all aligned to a single global coordinate basis. Calibration Process performed at 3DM to generate the relationship between the centroid data generated by the camera and XY engineering coordinates in the target section. Centroid Data Data values returned from the sensor head representing the center of the laser line on each video line. Expressed in units of {fraction (1/16)} pixel. Core 3DM supplied Win2000 application that provides communication path between a user application and the USB hardware. Device Any electronic subsystem connected via USB interface. Device Driver A software module, specific to each device, that provides the communication path between the PC operating system and core. Encoder Incremental or absolute encoder providing position information in the Z direction. Field of View (fov) The area of valid pixel data within each camera sensor. Image data outside of this is discarded in the data conversion process. FPGA Field Programmable Gate Array - Hardware unit in every 3DM device that provides integrated processing of centroid and other data. Hsync Horizontal sync pulse which is generated at the start of each line by each camera. Hub USB device that provides one upstream connection and 4 or more downstream connections to additional devices. A self powered Hub is capable of providing 0.5 amp per downstream port. 3DM modified hubs provide up to 1.0 amp per downstream port. Note that one of the 4 downstream devices is typically an encoder interface located adjacent to the Hub leaving only 3 downstream ports for connection to additional devices. LUT Look Up Table. Table of values providing the conversion between Centroid values and engineering coordinates. Sensor Head Physical package comprising a single pcb, one or two cameras and one or more laser line generators. Slice A block of profile data taken at one Z position. Typically includes data from all relevant cameras. Target Section The measurement cross section defined by the plane of the laser line generators and physical boundaries imposed by the system. USB Universal Serial Bus interface. The Hydra USB ™ system uses the full speed - 12 Mbit/s - as specified in version 1.1 of the specification. Vsync Vertical synchronisation pulse that defines the start of every frame in a camera. The camera can accept this signal and phase lock to it, or can output this signal to sync other cameras or to provide an external timing reference. Conventions Device Numbering All numbering starts at 0. Thus for example, the sensor heads in a system are numbered 0, 1, etc. Sensor head stations will be numbered in a clockwise (facing in the direction of product flow) manner with station 0 the first after 270°. Coordinate System and Units of Measurement Installed System

The Right Angle Cartesian coordinate system as shown in FIG. 14 is used for the installed system.

The origin is defined as the mid point on the top surface of the belt or chain.

Product travels in the Z direction through the Target Section which is defined by the plane of the laser line generators.

Baseline Imperial system: the unit of measurement in the X and Y axes is 0.001″ (thousandths of an inch) expressed as signed short integers for a measurement range of +/−32.7″.

Baseline metric system: the unit of measurement in the X and Y axes is 0.01 mm (10 micron) expressed as signed 16 bit integers for a measurement range of +/−327 mm.

The unit of measurement in the Z axis is encoder ticks where one tick corresponds to the smallest quadrature increment.

Sensor Coordinate System

The local coordinate system for each sensor head is defined below and shown in FIG. 15. This coordinate system is used for factory calibration.

6.0 Overview

System

FIG. 16 shows a typical Hydra USB™ installation—

-   -   Several sensor heads are deployed around the scan region. The         laser planes are roughly aligned and define the target section.     -   A Power/Comms interface provides the sensor head power and USB         connections and hosts an encoder interface.     -   A Win2000 computer connects via USB and provides the ‘core’         platform.     -   User applications reside on the ‘core’ platform or reside on         other computer systems and communicate with the core via TCP/IP         over Ethernet.

The minimal system configuration is a sensor head with a single camera and laser (requires<0.5 amp) which may be connected directly to the ‘core’ PC USB port.

The practical maximum system complexity would be a system with four, two camera sensor heads, a motion controller and encoder subsystem, a ‘core’ PC and one or more user applications on one or more remote systems.

The system configuration supports the ‘plug and play’ concept of USB devices wherein all connected devices are recognised and appropriate firmware and drivers loaded as available. The power-up loading of firmware from the Host is a departure from the usual loading of code from on-board EEPROMs etc. This approach is made possible by the unique Cypress re-numeration technique and provides flexible sensor configuration and easy code upgrades.

After installation, each system has a unique configuration dependent on the physical location of the sensor heads and initial system setup requires some customisation beyond the plug in point. The customisation information is retained in the form of ‘aligned’ LUTs, registry entries, and *.ini files and is available immediately on subsequent system boots.

Hardware

1.1.7 Sensor Head

A sensor head comprises the following:

-   -   One or two CMOS cameras     -   One or two laser line generators     -   Optical body supporting these     -   PCB containing FPGA logic, Cypress EZ-USB microcontroller, and         EEPROM storage.     -   Overall enclosure

Power to the head is supplied at a nominal 5vdc via the specified USB cable conductors. The 3DM sensor heads require ˜0.8 amp in two camera versions which exceeds the USB specified maximum 0.5 amp draw from a USB port. 3DM provides modified USB hub and power supply assemblies in this instance.

All critical logic on the sensor head and the camera pcbs operates at 3.3vdc.

1. Camera Assembly

Each assembly consists of a PCB, lens mount, lens and optical interference filter.

The PCB contains a monochrome Kodak KAC-0311 CMOS camera chip operated as follows:

-   -   640 lines×480 pixels—Window of interest to 32 lines by 256         pixels     -   Pixel clock rate 20 Mhz     -   8 bit digital video output

Each camera PCB is connected via flat ribbon cable directly to the FPGA logic on the main sensor head PCB.

The following camera parameters may be adjusted by ‘core’ configuration commands:

-   -   Window (WOI) of interest size and position     -   Horizontal line skipping—2×, 4×, 8×     -   Exposure time 0.1 to 32 ms     -   Analog gain 1×-8×     -   Compander ON/OFF (expands lower 32 levels×4, compresses upper         224)

These parameters are set over an I²C interface to the camera via commands that typically require several hundred μsecs to complete.

The camera acquires digital video data at frame rates dependent on the size of the WOI and exposure time.

Frame time is approximately the sum of exposure time+(number of pixels/pixel clk freq).

Typical frame rates are 50 to 150 Hz.

Centroid data is generated and passed back to the ‘core’ at real time rates.

Gray scale video data requested by the core for diagnostic purposes is acquired over multiple frames and passed back at speeds determined by the available USB bandwidth—typically 0.5 Mbyte/s max.

The camera is operated in external sync mode with sync signals generated by the EZ-USB microcontroller and locked to a multiple of the USB Frame time.

The Lens Mount provides a rigid mount of the PCB, lens and interference filter to the optical body.

The Lens is a fixed focus, fixed aperture multi-element type threaded in to the lens mount. The focus is set at the factory and permanently locked. Different focal length lenses are used in different sensor head types.

The interference filter passes a narrow wavelength band centered on the laser color.

2. Laser Line Generator

The laser line generator consists of a visible laser diode (nominal 670 nm), collimating and line forming optics.

Typical output power is 25 mw.

The laser is operated in pulsed mode with the pulse time matched to the camera exposure time.

Line fan angle and focus point are fixed per sensor head type and matched to the application. Fan angle lies in the range 15-808 full angle. Focus point in the range 2″ to 200″.

3. Optical Body

The Optical Body provides the rigid geometric positioning of the camera(s) and laser(s), and provides a mounting location for the main PCB.

4. Sensor Head PCB

The sensor head PCB provides the control and data path between the camera and USB interface.

The FPGA logic on the PCB receives digital video from each camera and either passes this straight through to the microcontroller as diagnostic video, or calculates the position of the laser line on each video line and passes this ‘centroid’ value to the microcontroller.

The microcontroller is an 8051 family part with integrated USB1.1 interface. It operates at a 48 MHz internal clock frequency.

The PCB is equipped with an RS232C debug port with pin assignments as follows: RS232C Debug port 3 pin 0.1″ molex header -> DB9 PC Pin Designation pin 1 GND 5 2 Tx output 3 3 Rx Input 2

The default settings are 19200 baud, no parity, 1 stop bit. No handshake protocol.

1.1.8 Hub

The Hub provides USB connectivity between a single ‘core’ PC USB port and multiple USB devices such as sensor heads.

The Hub is an active USB device and appears as such in the Windows Device Manager and other utilities. It does not appear as a device in the Hydra USB™ Diagnostic or other applications.

The Hub is always self powered and does not draw power from the ‘core’ PC port except for a small pull up resistor to indicate its presence to the ‘core’ PC hardware. The Hub draws its power and that of downstream devices from a 3DM supplied power supply.

The downstream device power is routed through the hub and is typically protected against accidental short circuit by fuse or current limited power distribution switch—a short circuit will cause thermal shutdown.

The connection to downstream devices is typically made with external cabling, although the encoder interface (a USB device), if present, may be connected with wiring internal to any enclosure.

1.1.9 Encoder Interface

The Encoder Interface is available in variants to match various system encoder types. The following variables are supportable: Encoder Type Variables Parameter Options Encoding Incremental Absolute Signal Quadrature Pulse & Direction Pulse Index Yes No Signal TTL Level Differential TTL Optical Software

The Hydra USB™ Software comprises a set of drivers and application software that is common to all systems, and one or more application specific modules.

The common software set is termed the HYDRA-USB foundation set, or FSU (Foundation Set USB) for short.

The FSU consists of the following: Foundation Set USB Components Component File names Kb Location Description Core Core.exe 3dm\bin Executable (Core -pr for real time priority) MSVCP60.dll Along the Microsoft C++ runtime $PATH library - present on most machines, but there was one machine where this dll was not present

Core.reg 3dm\bin Core.exe registry entries - double click to install Dev_cmm.dll 3dm\bin Cmm Device Core extension module Conv_HUP3DM.dll 3dm\bin Profile generator/ Converter module HydraUsb.ini WINNT Core configuration file Launch UsbLaunch.sys winNT\system32\ Device firmware loader Driver drivers driver binary UsbLaunch.inf 3dm\sys WDM configuration file for usblaunch UsbLaunch.reg 3dm\sys Driver registry entries - double click to install Scan2.hex 3dm\sys Device firmware Runtime HydraUSB.sys winNT\system32\ Runtime device driver Driver drivers binary THydraUsbDriver.inf 3dm\sys WDM configuration file for hydrausb.sys Diagnostic HydraUSBDiag.exe 3dm\bin Hydra USB ™ diagnostic GUI App client application HydraUsbDiag.ini WINNT Diagnostic application configuration file Msflxgrd.ocx Along the Microsoft ActiveX tabular $PATH control required by HydraUsbDiag - install/register with regsrv32 msflxgrd.ocx, if not registered already - there is a chance that some installed apps use it - in that case Diag got a free ride. The Core and Drivers must be present for a functional system. The Diagnostic application provides many support services and typically should be running to operate the system from another client application. 1.1.10 Core

The Core is a Win32 application that provides a common interface for client applications to the Hydra run time device driver and Hydra USB™ devices. It also hosts and manages custom specific profiling applications called application controllers.

On the application side, the core presents a socket based interface for control and communication.

On the driver side, the core communicates with Hydra USB™ runtime driver via the standard Win32 IOCTL model.

The Core can run in two ways: as console application and as Win32 service.

The command parameters for core are:

-   Core [—p<nhr>][—svc]—p<priority> sets the Core process priority     level:     -   n=normal priority     -   h=high priority     -   r=real time priority         Example: Core -ph Starts the Core in High Priority

The default is real time priority (Core -pr)

-   -svc starts the Core as service process. The default way to start     Core is as console application, so -svc switch mast be set     explicitly to start core as the service. -   Warning: -svc switch cannot be used by a user to start it from     command line. To start the core as the service, the Core has to be     installed—registered to OS (Service Manager) with command line     having -svc switch. -   CoreSvcInst.exe utility can be used to install, uninstall, start,     stop and monitor Core as service process.

There are a several differences between running Core as console application and as the service process. The most obvious difference is that when Core runs as console application, the console window is on, error and info messages which are logged to the log file are as well printed on the console window. When Core runs as a service, no window is open, so error messages are redirected to system debugger. These messages are still logged to the core log file, but if user wants to look at messages as they come, he has to use some utility capable of capturing Win32 debugger messages. We at 3DM use DebugView.exe freeware program from www.sysinternals.com for that. Debug traces are not redirected to the system debugger, so an user cannot see debug traces when Core runs as service process.

Core as service offers functionality not available in console mode: It receives and handles notifications from the OS about devices being plugged or unplugged. As service, the Core can add new plugged devices in run-time and it can immediately alert when some device is unexpectedly removed. Note that, as a service, Core can add new devices incrementally, but it does not attempt to re-numerate devices or update its internal device list after some of them are removed—it just sets the error state and waits to be shut down.

1.1.11 CoreSvcInst Utility

CoreSvcInst is graphical Configuration/Installation/Monitoring utility (see FIG. 17).

This utility allows a user to install, uninstall, start and stop HydraUsb Core service, as well as to monitor the service status.

The utility displays small icon on desktops tray depicting three states:

-   Service is running OK -   Service is stopped -   Service is running, the error has occurred (Device is lost)

The Close button closes the utility window, leaving the tray icon on. An user can bring the window panel back by right clicking on the tray icon.

CoreSvcInst reads configuration parameters from CoreSvcInst.ini configuration file: It uses this parameters to install the HydraUsbCore Service:

[Parameters]

Service Name

-   -   The name of the service. The Service Control Manager uses this         name to find the service in its database. Default service name         is HUSBCore         Service Display Name     -   The service title, this will be shown in Control panel Services         list. Default title: Hydra Usb Core         Service Command Path     -   The command to start the service. Default: C:\3dm\bin\Core.exe         -ph -svc         1.1.12 Launch Driver

The launch driver is the common driver launched by the Win2000 OS whenever a Hydra USB™ device is plugged into the system.

The launch driver has a single purpose—to load the appropriate firmware into the Hydra USB™ device and then initiate a warm reset of the device.

The launch driver identifies each device type from the PID (Product ID) and DID (Device ID) hard coded into each device, and downloads the proper firmware by matching the PID and DID against registry entries.

After download of the firmware, the driver sends a warm boot command to the device which causes it to ‘disconnect’ from the USB interface and then reconnect with PID and DID values read from the downloaded firmware (new personality). The Win2000 OS terminates the launch driver on the disconnect. On connection of the new personality device, it loads a new driver, the run time driver, using registry values matched to the new PID and DID. This process occurs for every device on power up, and typically requires no more than a few seconds for a complex system.

1.1.13 Run Time Driver

There is one run-time driver for all the Hydra USB™ devices. Its name is HydraUsb.sys

1.1.14 Configuration Checking

The various software modules are identified by the verbose file names and functional descriptions as noted above. In addition, each release of each module is tracked by a 5 digit part number which is available to the user using the configuration query tool in the diagnostic application.

The part number tracking is also applied to the firmware loaded into each sensor head and the embedded FPGA code.

1.1.15 Profile Conversion

The conversion from centroids to profile points takes place in application specific controllers. However, all of controllers share the same underlying conversion code which uses camera specific calibration LUTs for the conversion. Centroids are converted to profile points, each point is x,y coordinate where both x and y values are 16 bit signed integers.

Centroids are received from devices as 16 bit unsigned integers:

-   1. Low 14 bits are actual centroid value -   2. Bits 14 and 15 are reserved for centroid quality qualifiers.

Some applications are interested in centroid quality bits, so the profile converter provides the way to embed these two bits in the profile point. It converts one of coordinates from 16 bit signed integer to 14 bit signed integer and transfers quality bits from input centroid to the converted coordinate.

The routine which inserts these bits works on whole profile from one camera at the time.

-   -   It scans the input array of points to figure out is it better to         squeeze these bits in x or y coordinate.     -   It counts number x's and y's which are out of 14 bit signed         range (−8192-8191) and it picks the coordinate with fewer number         of values over the range (if picks the x if they are the same).     -   It converts then all values of that coordinate to 14 bit signed         integer. Values over the range sets as invalid.

The profile message has a 16 bit status bit field where bits 0, 1, and 2 are used to depict the quality bits propagation:

-   Bit 0—x coordinate is used for quality bits -   Bit 1—y coordinate is used for quality bits -   Bit 2—this bit is set if some of coordinate points could not be     converted because they were out of range. Note that the profile     message still can have lots of good values, this is just an     indicator that some conversion loss occurred.

A client application receiving profile message should check these bits first to determine are profile coordinates full 16 bit signed or 14 bit signed values. If the profile coordinate is 14 bit value, the value should be converted to 16 bit signed integer. Quality bits are 14 and 15.

7.0 Quick Start

This section provides information for quickly installing and operating a minimal configuration system consisting of a single Hydra USB™ sensor connected via power junction box to a Win2000 PC. The power junction box in this instance provides only a source of 5vdc and has no internal hub.

Directories and Files

The following directories and files should be present. If not, follow the Software Installation procedure in the next section. c:/3dm   /bin     /core.exe   /HydraUsb     /calib   /sys     /xxx.hex     / *.inf

Note that the 3dm directory resides on the same drive as the Windows installation (almost always the C: drive).

Software Installation

The software must be installed before the USB devices are connected to the machine. This will put the appropriate device driver files in place for the Windows Plug and Play manager. Software Installation proceeds in two steps, copying files to the machine and plugging in the USB devices for the first time.

1.1.16 Copying the Software to the PC

To copy the software to the Windows PC, proceed as follows:

-   1. Insert the supplied installation CD-ROM into the CD-ROM drive of     the machine. -   2. Double click on “My Computer”, then double click on the CD-ROM     drive (usually drive D:). -   3. Double click on the setup.exe file to start the installation     program. -   4. Click on the “Next” button of the Welcome dialog. -   5. After carefully reading the Software License Agreement, click     “Yes” if you agree to perform the software installation. If you     click the “No” button, the installation will not be performed. -   6. When the Setup Complete dialog appears, click the “Finish”     button.     1.1.17 Installing the Device Drivers

The device drivers are copied to the machine with the other support software, but they are not installed by Windows until the Plug and Play manager “sees” the devices for the first time. When the Hydra USB™ devices are first connected to the USB port of the PC, proceed as follows:

-   1. When the Found New Hardware wizard appears, click on the “Next”     button.

When the Install Hardware Device Drivers dialog appears, select the “Search for a suitable driver for my device” selection, then click on the “Next” button.

-   2. When the Locate Driver Files dialog appears, check “Specify a     Location” and uncheck all other choices. -   3. At the Insert manufacturer's installation disk dialog, type (or     browse to) c:\3dm\sys. -   4. When the Driver Files Search Results dialog appears indicating     that the driver has been found, click the “Next” button. -   5. When the Digital Signature not Found dialog appears, click the     “Yes” button to indicate that you want to proceed with the     installation. (The 3DM drivers do not contain Microsoft Digital     Signatures, so this dialog is expected.) -   6. Click the “Finish” button on the Completing dialog for the     wizard.

Repeat the process for any subsequent devices. Each device installed will appear twice, once in its unprogrammed form and once as a programmed device.

Electrical Connections

Connect the sensor head USB cable to the power junction box.

Connect the power junction box to the PC USB port.

Connect the power junction box to an appropriate power source (AC or DC).

Power Up and Driver Set Up Observe the ‘Universal Serial Bus Controllers item’ in   Settings     Control Panel       System         Hardware  (accessible from desktop computer icon - properties)           Device Manager Power up the power junction box

Observe the activity in the Device Manager screen as the USB device is found, code downloaded and re-numerated as a Hydra USB™ device appearing in a new Imaging devices section. Refer to the Driver Installation section of this document if this procedure does not complete as expected.

Core and Diagnostic Launch

Start the core.exe application from c:\3dm\bin. Use the command line option from a shortcut and add -pr to the command line to set real time priority.

This will display a console style window and text messages as shown in FIG. 18, which shows:

-   Line 2 Device with Product ID 0×4843 and Device ID 0×0032 has been     found -   Line 3 No more devices found -   Line 6 The core has started the socket server at Port 5000 -   Line 7 The server is available for one device -   Line 8 The extension module for a CMM device matching the PID and     DID has been loaded -   Launch the Diagnostic GUI by invoking c:\3dm\bin\CmmClient.exe     -   Press the Connect button and observe the config window update in         the GUI and the device serial number appears in the         Centroid/Video acquisition box     -   Select the appropriate Converter form the pull down window     -   Press the Launch button to load the LUTs and converter module         for this device.         Core Test Modes -   Skip this section for normal setup -   Several test modes are available directly from the core console     window. Care should be exercised when using these.

Pressing the space bar (or any none mapped key) displays which keys are mapped—typically as follows:

Commands: q --- quit b --- burst a --- abort bursts v --- verbosity verbosity controls whether a Line Feed (LF) is appended to every printed line, or if it is just overwritten.

The ‘burst’ mode operates in conjunction with parameters set in the HydraUsb.ini file which can edited with Notepad:   [Burst]   Period=6   NumReads=250   ;0 = verbose, 1 = report   DebugPrint=0   numCameras=2 [DEV_CMM]   section header don't alter Period interval in milliseconds between data requests -   minimum 6 max, 254, must be an even number if two   cameras are used per sensor. Sample interval is   period/num cameras. Ie a value of 8 in a two camera   system results in 250Hz sample rate. NumReads number of samples requested in this burst DebugPrint   0=verbose - every USB request and reply is printed (see verbosity above)     1 = report - report at end of burst numCameras   number of cameras for data request per sensor - typically 2

The core dumps messages for every transaction in burst mode if DebugPrint=0 as shown in FIG. 19, wherein: FC: USB frame count 706705418 Win32 representation of Frame count - mod 2048 (0x00A) bit USB Frame Count Centroid req wvalue next requested sync sent to sensor head(s) Bulk Pipe Read Stamp USB Frame count embedded in header of received data block Alignment

In systems with mutiple cameras, it will be necessary to ensure that all cameras are aligned, i.e., that they all operate in the same coordinate system. This will involve running the diagnostic with an alignment target in the field of view of the sensor, and adjusting the LUT transformation parameters to bring the cameras into alignment. See section 0 for more details.

This completes system set up.

8.0 Diagnostic Application

The Diagnostic Application is a Win32 GUI application that connects via the socket interface to the ‘core’ server. It provides the following functions:

-   -   Configuration of connected sensors     -   Display of centroids and video from selected device and camera     -   Alignment of sensors     -   Display of Profile data for the system     -   Storage of data in appropriate formats     -   Capturing and replaying captured profiles         GUI

The Diagnostic Display is shown in FIG. 20:

The GUI is split from top to bottom as follows:

-   -   Drop down File/Edit/View/Help menus     -   Request Action Panel     -   System Profile display—green grid     -   Sensor text display showing either configuration, properties or         signal quality factors on she left hand side     -   Sensor centroid/video display on the right hand side     -   A lower status message display         1.1.18 Request Action Panel         Connect/Disconnect Connects/Disconnects from Core Server         Centroid/Video Acquisition

Centroid and video acquisition is performed at the frame rates and exposure times set for the device (see configuration below). The actual update rate to the screen is set by internal software timers in the case of centroids, and limitations of the USB data transfer for video.

-   -   Pull down box selects device by Serial Number     -   Radio buttons select either camera for video and centroid         acquisition     -   Get Centroids—Get centroids for selected device and camera     -   Poll Centroids—Continuously get centroids for selected device         and camera at ˜20 Hz request rate     -   Get Video—acquires and displays video     -   Clear All—delete centroid and video from centroid display         Profile Acquisition

-   Launch Converter—Launches an appropriate converter module which     transforms centroids from all sensors to a single profile display.     The converter requires LUTs for each sensor that are aligned to the     global coordinate system. List of available converters are obtained     from Core server.

-   Kill Converter—Orders the Core to stop and unload the launched     converter.

-   Get Profile—Gets and displays a single profile

-   Poll Profiles—Continuously gets and displays profiles. The get and     display frequency is set by an internal software timer.

-   Get FOV—gets and displays field of view from all cameras: see FIG.     21, wherein white trapezoids are fields of view for cameras, smaller     trapezoid is FOV for camera with yellow profile, and larger     trapezoid is FOV for camera with red profile.     1.1.19 Capture and Replay Profiles

The menu View/Capture Profiles opens the profile capture and playback window (see FIG. 22).

The window is divided in three groups: Settings, Profile scanning and Profile playback.

Settings group shows the current setting for profile capture. The parameters are read from the application .INI file (HydraUsbDiag.ini). This is the snippet of the .INI section:

[Scan Profiles]

-   Target Directory=c:\temp\2 -   Number Of Scans=120 -   Z Step=10

Refresh button re-loads these parameters from the INI file to the program memory. So, if a user wants to change settings, she should first manually edit these entries in the file, save the file and click on Refresh button.

Profile scanning group of commands is used to record and save captured profiles. By clicking on Start button application starts reading profiles from the Core server. The number of profiles the application is going to collect is set by Number of scans settings parameter. The scanning progress is shown on progress bar and numeric counter. After reading all profiles, the application saves all captured profiles to the file in the directory set by Target Directory parameter. Profiles are saved in two files, two formats:

-   In one file in CSV format suitable for loading to Excel, In another     file in XYZ format, suitable for viewing as 3D point cloud in     Tecplot. -   CSV format is explained in Profile Save To File document section.

XYZ format is text format, each line has three numbers delimited by space: X Y Z X Y Z X Y Z . . .

-   X and Y values are x and y coordinates from profile points, -   Z value is calculated by the program. Z starts with 0, and for every     scan the value of Z is incremented by Z coordinate step setting     parameter.

After saving the scans to files, the application will display message box showing the names of saved files.

Profile Playback group allows an user to replay captured or previously saved profiles. Clicking on Load . . . button a user can load profiles saved before an replay them. Commands to iterate thou captured profiles are slider and spin button. Profiles are displayed at the profile window.

1.1.20 HUE-6 Control display

The View/HUE-6 menu activates HUE-6 control display (see FIG. 23).

The Counters section of the main HUE-6 view shows values of all six counters and, if some of counters have an error bit set, the Error counter will increment every time the new reading is received.

Flags section shows state of timeout and Fifo overflow flags of the last counter reading.

Referring to FIG. 23, user can send commands and receive data from HUE-6 device via HUE device socket.

Use commands buttons to send commands to the HUE-6:

-   -   Reset button resets all counters.     -   Poll Counters reads all counters continuously. Get Counters         reads all counters once.     -   Preset . . . brings the dialog box which allows to preset         counters to desired value. User can select which counters she         wants to preset by clearing/checking the checkbox.     -   Configure . . . brings the dialog box where user can set         parameters for each individual counter: enable/disable, set mode         and pre scale factor (see FIGS. 24 and 25).

Configuration parameters are described in LS7266R1 Manufacturers data sheet.pdf

1.1.21 Profile Display

The Profile Display shows data from all active heads in real engineering units in a single coordinate system.

The layout of the display is set by the pull down Edit menu in   Edit     Settings       Profile Display   Units   Xmin Xmax   Ymin Ymax   Grid Within the display

-   -   Mouse right click zooms out, left click zooms in

The lower right screen shows X and Y mouse coordinates in pixels.

Profile data is overlayed for all active profile sources and color coded as per settings. An active profile source is defined as a camera exposed at the same time as the others.

1.1.22 Profile Save to File

The data in the display can be saved in several file formats using the pulldown menu

-   -   File         -   Save Profile             5. Excel Comma Separated—*.csv

File format consists of quality factors followed by 2 columns of X Y data per profile source as follows: Profile File Format (*.csv) Valid Lines Valid Lines Valid Lines Extra Extra Extra Centroids Centroids Centroids Wide Features Wide Features Wide Features Large Large Large Centroids Centroids Centroids Small Small Small Centroids Centroids Centroids Centroid Centroid Centroid Pixels Pixels Pixels X(0, 0) Y(0, 0) X(1, 0) Y(1, 0) X(s, 0) Y(s, 0) X(0, 1) Y(0, 1) X(1, 1) Y(1, 1) X(s, 1) Y(s, 1) X(0, n) Y(0, n) X(1, n) Y(1, n) X(s, n) Y(s, n)

-   -   Where there are (n+1) active video lines, and (s+1) active         profile sources.         6. ASCII XYZ—*.xyz

Ascii XYZ is a file format accepted by several other rendering and visualisation programs.

Data consists of the three X, Y and Z integer values per line separated by white space with each active camera following in sequence. The Z value is a sequential number incremented by 1 starting at 0 after program launch, or a user value set in the program INI file (HusbDiag.ini, Z Step parameter):

-   [Scan Profiles] -   Target Directory=c:\temp\2 -   Number Of Scans=120 -   Z Step=10     7. Binary *.prf

The binary file format follows the same format as the *.csv data but is written in binary form (not ASCII).

1.1.23 Profile Load from File

The user can load a profile from a binary *.file into the display window using the pulldown menu command

-   -   File         -   Load Profile

This is also useful for converting a previous saved profile file to one of the other formats—XYZ or csv.

1.1.24 Sensor Configuration

Sensor configuration is one option for this panel chosen from the drop down View menu.

The Sensor Configuration panel provides user access to many programmable features of the sensor heads. Sensor Configuration Parameter Units Range Comment WOI X Pixels  0-576 Window of Interest Origin - X WOI Y Lines  0-440 Window of Interest Origin - X WOI Width Pixels  64-640 Window of Interest Width WOI Height Lines  40-480 Window of Interest Height Sub Lines — 1x-8x Line skip factor - Number of lines is scaled by this Laser Phase Binary OWN/BOTH Frame Rate Hz  1-250 READ-ONLY Exposure μsec   128-32,640 Manual exposure setting 6 μsec   128-32,640 Min exposure in auto mode AutoMaxExposure μsec   128-32,640 Max exposure in auto mode ExposureMode —  0-255 0 > manual, 1 chirp > min-man- max, 2 > auto range Gain — 1.0x-7.2x Compander Binary ON/OFF Pseudo 10 bit mode - Expands lower 2 bits into 128 Auto Binary ON/OFF on/off for auto Threshold threshold - min level == Threshold Threshold Grey  0-255 Typically set to 12 - Start level level in AUTO mode Reject Binary ENABLED/ Control for max Feature DISABLED feature discard Max Feature pixel  0-40 Max feature width above Width threshold - larger discarded B&W Filter Binary ENABLED/ Control for black DISABLED and white pixel filter Black Pixel pixel INACTIVE/ Max black pixel width 1-3 width dropout ignored White Pixel pixel INACTIVE/ Max white pixel width 1-3 width dropout ignored Test Mode decimal  0-255 Factory use - test modes -

Configuration properties may be edited by the user. A blue text indicates that the variable has been changed but not written to the sensor head. All data is written when Write is pressed and then automatically read back. Note that overrides and sanity checks in the Diagnostic application and/or sensor head firmware will either refuse an update with an out of range value or write the closest appropriate. In particular, the WOI width variable is adjusted to be modulus 64 at >=512 and modulus 32 below to facilitate video handling, and the Frame Rate value is always a multiple of 1/ms.See Configuration Checks below.

8. Configuration Checks

There are a number of range checking, consistency, and overrides that are applied to the user entered values. These are performed in the device driver and/or sensor firmware and the corrected values sent back to the core for display in the GUI.

All of these checks are bypassed if ** mode is selected from the Diagnostic GUI (Expert in-house).

The checks are described below in the following format

-   U—User entered value -   Uc—User value converted to internal representation—as sent to sensor -   Rc—Return value in internal representation -   R—Value returned to Core -   Pc—Previous value in internal representation

and the following sensor constants are defined in HusbCmds.h PIXELS_PER_LINE 640 LINES_PER_FRAME 480

and the following are implicit to the camera type and operation and are defined in tbd MIN_WOI_WIDTH 64 MIN_WOI_HEIGHT 64 MAX_LINE_SKIP 8 MIN_EXPOSURE 128 MAX_EXPOSURE 32640 MIN_GAIN 10 MAX_GAIN 72 MIN_THRESHOLD 4 MAX_THRESHOLD 100

Pixel and line entries are checked in the following sequence to ensure geometric consistency. The checks that follow use the ‘corrected’ values not the user entered values. Sub Lines   (Must be 1,2,4, or 8)   No unit changes ( Uc = U, R = Rc)   Valid entries 1,2,4,8   R = U   invalid entry R = 1

WOI Height   (Must be within frame size and divisible by Sub Line number)   No unit changes ( Uc = U, R = Rc)   if(Uc < MIN_WOI_HEIGHT)   R = MIN_WOI_HEIGHT   if(Uc > LINES_PER_FRAME)   R = LINES_PER_FRAME   else R = [Uc/(Sub Lines)]*Sub Lines

WOI Width   (Must be within frame size, divisible by 32 if < 512, and div 64 if >512)   No unit changes ( Uc = U, R = Rc)   if(Uc < MIN_WOI_WIDTH)   R = MIN_WOI_WIDTH   if(Uc > PIXELS_PER_LINE)   R = PIXELS_PER_LINE   else if(Uc < 512)   R = [Uc/(32)]*32 else   R = [Uc/(64)]*64

WOI X   No unit changes ( Uc = U, R = Rc)   if(Uc < 0)   R = 0   if(Uc> (PIXELS_PER_LINE-WOI Width)) R = (PIXELS_PER_LINE-WOI Width)   else R = U

WOI Y   No unit changes ( Uc = U, R = Rc)   if(Uc < 0)   R = 0   if(Uc> (LINES_PER_FRAME- WOI Height) R = (LINES_PER_FRAME-WOI Height)   else R = U

Exposure  ( MIN_EXPOSURE =< Exposure =< MAX_EXPOSURE) microseconds   Unit changes ( Uc = U/204.8, R = Rc*204.8)   if(Uc < MIN_EXPOSURE)   R = MIN_EXPOSURE   if(Uc> (MAX_EXPOSURE)   R = MAX_EXPOSURE   else R = U Exposure is set in increments of camera MCLK cycles ( 20MHz -> 50ns) and is available as a 20bit value at the camera. For speed of access, only bits 8 thru 15 ( a single 8 bit register access) are modified. - all other bits are set to 0. This provides the following.   Minimum time increment = 16* 256 * 50ns = 204.8 μseconds   Max time = 255 * 204.8μs = 52.22 ms

AutoMinExposure   ( MIN_EXPOSURE =< AutoMinExposure =< Exposure) microseconds   Units are the same as Exposure. Should be updated   automatically by GUI after Exposure change if >   Exposure

AutoMaxExposure   (Exposure =< AutoMaxExposure =< MAX_EXPOSURE) microseconds   Units are the same as Exposure. Should be updated   automatically by GUI after Exposure change if <   Exposure

ExposureMode     enum variable Frame Rate   (Calculated for information and set up purposes - No User entry) Calculate array readout time usFrameTime    = ((WOI Height/SubLine+1)* (WOI Width +   ROW_DARK_PIXELS ))/PIXCLKMHZ + FRCus; where     (kodakKAC0310Regs.h)   ROW_DARK_PIXELS = 51   PIXCLKMHZ = 20   FRCus = 36 // calc total time to expose and readout   singleMicrosecsFrameTime = usFrameTime + Exposure // calculate frame time for two cameras in series with overlapping exposure and readout as greater of 2x readout time or 2x exposure   if(usFrameTime > Exposure)     microsecsFrameTime = (2 * usFrameTime)   else     microsecsFrameTime = (2 * Exposure) // convert to millisecs and round up to nearest millisec   doubleFrameMilliSecs = (microsecsFrameTime/1000)+1; // ensure result is an even number - required for high speed sync of two cameras   if(doubleFrameMilliSecs%2)     doubleFrameMilliSecs++; // add 1 if not an even number to get odd/even phasing   Rc = doubleFrameMilliSecs*1000 // as sent to sensor head   R = 1000000/Rc

Gain (Check val is between 1x and 7x - Map 1x thru 7x to LUT entry )   Uc = 10*U   if(Uc < MIN_GAIN) Uc = MIN_GAIN   If(Uc > MAX_GAIN) Uc = MAX_GAIN   Uc = gain[Uc] // LUT values from   Rc = Uc   R = Rc/10 // float f2.1

Threshold (starting level for centroid algorithm)   No unit changes ( Uc = U, R = Rc)   if(Uc < MIN_THRESHOLD)   R = MIN_(—) THRESHOLD   if(Uc> (MAX_(—) THRESHOLD)   R = MAX_(—) THRESHOLD   else R = U

Test Mode   Permissible Values (0,1,2,3..)   else     R= Rc = Uc = 0 Camera Alignment

This section deals with the physical setups and procedures required to set up and maintain alignment among multiple cameras.

What Is Camera Alignment?

Camera alignment refers to the transformations required to place the coordinate spaces of all individual cameras in alignment with each other. To put it another way, since each camera has a unique location in space as well as a unique viewpoint, they must be aligned with respect to a global coordinate system.

9. Camera Alignment Targets

In order to set up camera alignment, some form of alignment target must be set up in the fields of view of all cameras. This target could be as simple as a pair of planes intersecting at a 90° angle in view of the cameras, or it could be a more complex setup in the case of cameras examining objects from different viewpoints.

As an example, take the case of 4 sensors (for a total of 8 cameras) examining both sides of a pair of railway rails. One possible setup for an alignment target would be as shown in FIG. 26. In this example, the pair of cameras belonging to each sensor “sees” a different corner of the target, and the alignment process must align the coordinate systems of each camera with the global coordinate space.

The Hydra USB™ diagnostic program provides the ability to adjust the transformations applied by each camera so that all cameras may be aligned with the coordinate system. It also provides a method to refine the alignment by fitting lines to points which lie along the planes of the alignment targets.

10. Diagnostic .INI File Entries

To enable the diagnostic to perform its adjustments for fine alignment, the positions of the target vertex for each camera must be supplied in the .ini file. In the above example, the diagnostic .ini file (located in c:\winnt\system32\HydraUSBDiag.ini) would contain the following entries: [AlignTarget] ; Allowed units are “inch” and “mm”. Units = inch ; Exclude points within this radius of actual target point. PointExclusionRadius = 0.25 ; Width of target region for alignment points. LineCaptureWidth = 0.5 ; Count of points that outline the alignment target (maximum of 10). TargetPoints = 8 ; x, y coordinates of the points of the alignment target. TargetPoint0 = −30.75, 0.0 TargetPoint1 = −30.75, 10.0 TargetPoint2 = −28.25, 10.0 TargetPoint3 = −28.25, 3.0 TargetPoint4 = 28.25, 3.0 TargetPoint5 = 28.25, 10.0 TargetPoint6 = 30.75, 10.0 TargetPoint7 = 30.75, 0.0 ; Color for painting the alignment target. Color = blue ; Alignment points for the various heads. [AlignHead0] Cam0AlignPt = 2 Cam1AlignPt = 2 [AlignHead1] Cam0AlignPt = 5 Cam1AlignPt = 5 [AlignHead2] Cam0AlignPt = 1 Cam1AlignPt = 1 [AlignHead3] Cam0AlignPt = 6 Cam1AlignPt = 6

The first entry selects either metric or English units for data entry. The PointExclusionRadius entry defines a zone about the vertices in which points are ignored for alignment purposes. This excludes points on the corners of the alignment target since these are often subject to blooming and other measurement errors. The LineCaptureWidth entry specifies the overall width of the region around the target faces in which points are selected for alignment of the corresponding face. Next, a count of the points in the target and the individual x, y pairs of corners for the target are specified. In this example, the target points specified correspond to the diagram above. Note that the system automatically closes the drawing of the target, i.e., the last target point is joined to the first.

The Color item specifies the color used to draw the outline of the target in the alignment screen. Finally, the target points for each individual camera are specified on a per-head basis. Here, the integer numbers refer to the target points, e.g., Head 1, Camera 0 is aligned to TargetPoint5 whose X location is 28.75 inches and whose Y location is 10.0 inches in the joint camera coordinate system.

11. Alignment Procedure

Once the alignment target is set up in the appropriate location, start the diagnostic, connect to the Core and launch the 3DM converter (note that only the 3DM converter supports alignment changes to the device lookup tables.) Proceed by first selecting the View-Align Profiles menu selection from the diagnostic. This menu choice displays the dialog shown in FIG. 27.

The dialog gives the rotation angle, translation X, translation Y and “flip X” settings for each camera. In this context, “flip X” is the mirror image transformation on the camera points. This menu setting also displays the target regions for the various cameras in the profile view.

To align a single camera, proceed as follows:

-   1. Decide if the “flip X” setting for the camera is correct. This     can be done by moving an object along the two surfaces of the target     while polling profiles to see if the image displayed on the screen     is reversed, or in mirror image of what it should be. Change the     “flip x” check box and click the Apply to LUT button as appropriate. -   2. Rotate the image as appropriate to get it “level” by using the     Relative Angle field of the dialog. Click Apply to LUT to see the     effect of changes. -   3. Translate the image in the X and Y dimensions using the TX and TY     fields of the dialog to bring the image of the vertex. Once again,     click on Apply to LUT to see the effect of the changes. At this     point, the images of the target for the camera should be located     roughly in the target region for that camera. -   4. Click on the appropriate Fine Align button for the camera in     question. If the rough alignment has been completed successfully,     the system will fit two lines to the points in the two target     regions and use the intersections of these two lines to refine the     alignment of the camera. Before completing the operation by applying     the changes to the LUT, the system will display a dialog containing     the proposed rotations and translations and ask for confirmation. -   5. It may be beneficial to repeat the Fine Align procedure a second     time, since the set of points contained in the target region may be     changed by the first application of the Fine Align procedure.     1.1.25 Sensor Properties

Sensor Properties is one option for this panel chosen from the drop down View menu.

The properties are all read only and are as follows Sensor Properties Read Parameter only Units Range Comment Firmware X — xxxxx Part # of loaded hex file FPGA X — xxxxx Part # of embedded FPGA code Temp X ° C. +/−127 Temperature on main PCB Starts X — 0-64k # of power up cycles Hours X — 0-64k Approximate # of hours powered up 1.1.26 Quality Factors

Quality Factors is one option for this panel chosen from the drop down View menu Quality Factors Read Parameter only Range Comment Valid Lines X Number of lines with only one valid centroid present X tbd Wide X Number of features > ‘Max Feature Features Width’ Centroid X Total number of pixels in Pixels centroids (power) X tbd Exposure X Exposure value used for this frame 1.1.27 Sensor Centroid/Video Display

The display shows both centroid and video from a single camera and a single sensor at a time.

The pixel data information at the bottom of the display provides the pixel X,Y location on the screen and the video pixel value in the range 0(black) to 255(white).

The centroid data for the displayed camera can be saved to a *.csv Excel file using the pull down menu

-   -   File         -   Save Centroids

File format is: Centroid File Format (*.csv) Quality Factor 1 Quality Factor 2 Quality Factor 3 Quality Factor 4 Quality Factor 5 Quality Factor 6 blank Centroid active line 0 Centroid active line 1 . . . Centroid active line n

-   -   Where there are (n+1) active video lines. Centroid data as         unsigned integer, units of {fraction (1/16)} pixel, starting at         X origin (ie start of Window of Interest).

The video data can be saved to a *.pcx file using the pull down menu

-   -   File         -   Save Video

File format is gray scale pcx. Note that the pcx file format uses run length encoding data compression and is lossless.

1.1.28 Status Message Display

Messages appear here and are usually self explanatory. The following should be noted:

Benign messages:

-   -   Failed to connect         Others:     -   Invalid Converter ID         4 USB Basics

This section summarise the key parts of the USB Interface as implemented for the Hydra USB™ system.

For more background material, there are many excellent references to the USB Interface USB interface, for instance, Universal Serial Bus Architecture, Don Anderson, Addison-Wesley, ISBN 0-201-46137-4 and also FAQ and links at the www.usb.org/developers/web site.

4.1 Summary

The Hydra USB™ uses version 1.1 of the standard and full speed, 12 Mbps, signal rate.

The USB interface operates on a master-slave basis. There is only one master, the Host computer, but there can be multiple slaves (USB devices), and these can be sensors, hubs, or any other logical device with a USB connection. A slave never transmits data unless this has been requested by the Host.

There are three physical parts to the USB system. These are the host (computer), one or more hubs, and one or more other devices. All connectors are one-size-fits-all, so a device can be plugged directly into the host, or into a hub, which in turn is plugged into the host.

The USB cable is thin (four wires) and carries enough power for low-power devices, like keyboards and mice. The maximum bandwidth is 12 Mbps, which is shared amongst all devices on the USB network. Since devices are organized in a tiered fashion, not every device needs a direct connection to the host. A device can be plugged into a hub, into another hub, and then the host, thus avoiding a clutter of wires behind the computer.

Whenever you plug in a device, the host senses voltage differences in the USB network and proceeds to query (enumerate) the device for type, vendor, functionality and bandwidth required. That device is assigned a unique address ID and co-exists with all other USB devices. Even if two identical devices are plugged in, they will each have a unique address and can be distinguished separately by the computer. Once enumeration is complete, the appropriate device driver is loaded by the operating system (O/S) and the user will be prompted for the driver disk if necessary. All contention of devices is handled by the host and by the software residing on the host. There is no need to configure interrupt IRQs, addresses, or DMA channels.

When devices are detached (unplugged) from the USB network, the host computer detects the detachment, alerts the appropriate application and unloads the drivers.

Other than plugging and unplugging the devices, there is no user intervention in configuring the devices.

The Hydra-USB system differs from the above only in the area of the power distribution. Many of the sensors require more current than can be delivered from a USB compliant port, and custom connectors, wiring and power supplies are used to overcome this. In all production units, the connector types are chosen to ensure that it is not possible to damage the sensor or PC by improper connections.

Protocol

The USB interface uses the concept of logical pipes and endpoints to define the various means of passing data and commands between the Host and devices.

Control Pipe 0 is used for all commands from the Host and responses from the device.

Specifically for Hydra USB™, Bulk Pipe 2 is used for all data transfers from the sensor to the Host.

The Host issues IN tokens to the device to request data transfer in packet sizes of 64 bytes.

The protocol utilises ACK/NAK handshaking to pace data transfer.

The Host or device issues an ACK to signify error free completion of a transaction.

The device issues a NAK whenever it is not ready to provide data in response to an IN token. In a typical data transfer session, the Host is continually issuing IN tokens and the device is NAKing most of these.

This protocol is handled by hardware and embedded microcode at both the device and Host which significantly offloads the data handling burden from the OS or application code at either end.

USB Frame

The serial interface is implemented at the hardware level using a Host generated clock to impose a one millisecond frame structure on all communications.

Each frame consists of the following:

-   -   A Start of Frame (SOF) identifier and sequential frame number         between 0 and 2047     -   Any control transactions     -   Any bulk pipe transactions     -   Any interrupt transactions with a limit of one per device per         frame

The SOF and Frame Number are received simultaneously by all connected devices. This timing signal is used to lock all the sensors to a common time base.

The Frame Number repeats at 2.048 second intervals, and timing based on this has a resolution of 1 ms. In practice this limits camera frame rates to numbers in multiples of 1/(ms frame time).

Data Rates

The available bandwidth on the USB interface is 12 Mbps per Host port, or approximately 1 Mbyte/sec under optimum conditions. This bandwidth is shared between all the devices and the various transactions.

The actual sharing and allocation of bandwidth is determined by the Host Controller software under the following guidelines—

-   -   Control Pipe transactions have priority and will always be sent         within 1 frame time.     -   Interrupt transactions may occur at a maximum rate of one per         frame (as requested during device connection) These are serviced         at any time during the frame.     -   Bulk pipe transactions occupy the remaining bandwidth. IN tokens         are issued on a round-robin basis to all devices with a pending         data transfer request from the Host application.

In practice, the Host is almost continually issuing IN tokens at a 17 μsec interval to all devices and these respond whenever they have data available. A 64 byte bulk pipe data packet requires approximately 64 μsec for transfer. Measurements of actual data transfer rates show sustained rates of 10 packets per frame, or 640 Kbytes per second are typical in multi sensor configurations.

Cable Lengths

The USB specifies a maximum 5 meter cable length between devices.

Per usb.org\developers\FAQ->The cable length is limited by a cable delay spec of 26 ns to allow for reflections to settle at the transmitter before the next bit is sent. Since USB uses source termination and voltage-mode drivers, this has to be the case, otherwise reflections can pile up and blow the driver. This does not mean the line voltage has fully settled by the end of the bit; with worst-case under termination. However, there's been enough damping by the end of the bit that the reflection amplitude has been reduced to manageable levels.

There are two means available to accommodate longer distances between sensor and PC—add a standard USB signal repeater between the Host and Hub/Encoder box, or add a modified repeater between the Hub and sensor.

If the second option is used, then the repeater must be modified to pass the higher current through to the sensor, and any special connector or packaging requirements to suit the application must be addressed.

5 Installing Device Drivers

The following procedure may be used to manually install device drivers. It should not be necessary if the Installation procedure outlined in section 0 is followed.

Go to C:\3dm\sys directory and double click at UsbLaunch.reg. It will write registry entries needed by UsbLaunch.sys device driver.

Now, connect the device to a USB port. Hardware Wizard will report that a new device is detected, and it will ask for its .inf file. Browse to C:\3dm\sys and choose UsbLaunch.inf. If the wizard asks for device driver binary, point it to UsbLaunch.sys.

UsbLaunch device driver will start, and it will read the pathname of the device firmware file from the registry entry:

-   -   HKLM\SYSTEM\CurrentControlSet\Services\UsbLaunch\HexFi le

The USB device firmware file is *.hex.

UsbLaunch.sys will download firmware to the device, and USB device will reappear as the new device.

UsbLaunch.sys will drop out from the system.

Hardware Wizard will ask again for the device information—now about the device running our micro code (*.hex). Browse to THydraUSBDriver.inf and if it asks for device driver binary, point it to HydraUsb.sys.

To check if the device driver is loaded and running properly, open Device Manager (Control Panel/System/Hardware/Device Manager).

-   -   Hydra USB CMM Probe should be listed under Imaging Devices.     -   Right click at the device icon and select Properties, device         should run properly.

Now, if Device Manager does not list Hydra USB™ driver, but it lists UsbLaunch, it means that UsbLaunch driver failed to load firmware to the device. The most common cause is that the driver could not find firmware file.

Ensure that HKLM\SYSTEM\CurrentControlSet\Services\UsbLaunch\HexFile Registry entry points to the right path to our firmware file.

Note: The wizard installs the device only for the USB port to which it was connected! If you subsequently plug the device into another USB port on the PC, then you will have to repeat the above procedure.

6 RS232C Debug Port

Each sensor head is equipped with an RS232C serial port for debug purposes. This port can be connected to a PC COM port configured as (19200 8 n 1). Hyperterminal or similar can be used to monitor the Port, although ensure that a true win32 application is used to avoid priority conflicts—ie don't use a Dos based or similar program using legacy port accesses.

The port is bi-directional and can be used to set system parameters or test modes, although this is usually available only in special cases.

Message Formats

Message formats are usually specific to the product. An example is shown below: 05D9+ || Lh. 05DA+z 05DC+ || Lh 05DD+0105E2 . 05DD+z 05DF+ || Lh 05E0+s. 05E0+z 05E2+ || Lh. 05E3+z 05E5+ | Lh. 05E6+zLh. 05E9+z 05EB+ || S

-   The first 4 characters are the USB frame number in hexadecimal -   The + is a separator for readability -   The next character is mapped as follows:     -   I Sync point for camera 0     -   II Sync point for camera 1     -   L MicroController is starting acquisition of a bLock of data     -   h MicroController wrote header info (USB frame number) to data         block     -   z End of data block     -   s Stop request received from Host     -   S Stop request acted upon by microcontroller     -   . Period—set when number of packets left is mod64+1     -   V Start of video frame request     -   v Completion of video frame request—all data sent

A 4 character hexadecimal value is typically a sync request with the requested USB frame number—eg 05E2—the 01 leading this signifies the request is to camera 0 and camera 1.

7 System—Camera/Laser Timing Modes

Overview

Each Hydra USB™ sensor supports two cameras and two associated laser control pins. The sensor firmware and FPGA code provide multiple options for the timing of these relative to each other and to internal or external sources. These options are required to suit the free form physical configuration of one or more sensors and their optical systems. For instance lasers may be coincident or opposing, cameras may be exposed on alternating slices or together, and multiple heads may be ganged to increase active line length or to decrease sample slice spacing. Each of these may require a different timing configuration to ensure exposure takes place at the appropriate time and lasers are not ‘seen’ by the wrong camera.

Some typical options are:

-   -   internal free run or sync to integer USB Frame Count     -   sync to an external source via USB from Host     -   simultaneous sync of each camera, or 1808 out of phase     -   sync of each laser to its associated camera, or both lasers with         each camera     -   offset of one camera from another by exposure time to minimise         laser light crosstalk

The available timing configuration and associated parameters are dependent on the following:

-   -   the camera readout time is added to the exposure time. It is not         possible to operate a camera at sync intervals less than this         total time—see section below     -   the exposure time must be long enough to provide adequate         exposure, and/or the camera gain increased, or centroid         threshold level reduced     -   if an external sync mode is selected, then the appropriate         external hardware must be available—this is usually determined         at start up by the application specific controller.         CMOS Camera Parameters

The CMOS camera (Kodak KAC-0311 monochrome version—www.kodak.com/go/imagers) has the following properties:

-   -   640 pixels per line—480 lines per frame     -   Programmable row subsampling (pixel subsampling not supported)     -   Programmable Window Of Interest (WOI)         -   Rectangular—from 640×480 to 1×1 located anywhere in the             frame

The cameras are operated in the SFGS—Single Frame Global Shutter—mode, 20 MHz pixel clock, and the following additional properties apply:

-   -   Programmable Exposure 0-32 ms     -   Free Run or External sync

The total frame time, FT, is the sum of (exposure time+pixel readout time). FT=[(wr _(d)+1)*(vcw _(d)+51)*MCLK _(period) ]+T _(int)

-   -   Where         -   wr_(d)=number of active lines         -   vcw_(d)=number of active pixels per line         -   MCLK_(period)=50 ns         -   T_(int)=integration time

The graph shown in FIG. 28 shows typical readout times in the call out boxes.

-   Lines=(window of interest lines/row subsampling

The graph is intended as an aid to estimating system performance. The Host diagnostic software provides interactive setting of camera properties and returns the camera operating frequency as a read only value which is calculated by the firmware in the sensor using the user defined exposure time, window of interest size and line subsampling factor.

The camera operating frequency returned from the firmware is calculated as the reciprocal of ((exposure time+readout time) rounded to the next higher integer millisecond).

The camera can be operated by the sensor electronics in one or other of the following modes: (these modes are internal to the sensor operation and not directly selectable via the USB interface)

7.1.1 Free Run

The camera operates at the maximum frame rate by automatically exposing and then reading out data, followed immediately by another exposure+readout and so on. This mode is set by the sensor electronics holding the camera sync input high.

There is no phase locking of the camera to any source. This mode is used exclusively for video read back to the Host software.

7.1.2 External Sync

The camera timing is synchronised to the pulse(s) applied to the camera sync input. This input pin is driven independently for each camera by the sensor firmware.

The sensor firmware determines the time interval between successive sync.

System Timing Modes

7.1.3 Host Sync

The Host is responsible for providing a sync signal for Camera 0. Sensor firmware automatically interposes the sync for Camera 1 halfway between successive Camera 0 syncs

This mode is applicable when scanning at relatively constant speed, or slowly varying speed, eg rail scanning from a moving train. The Host Core tracks the motion via one or more Encoder modules and predicts when the next sample is required. This information is embedded in the request to Camera 0 and the sensor head logic provides the required sync pulse(s) to the camera(s). System Timing Mode Description Name Host Sync Description Host provides external sync signal for Camera 0 in the form of the USB Frame number for the next Camera 0 sync. Useage Tracking slowly varying external encoder intervals Purpose Cmd Data USB Setup RESET_SYNC_FRAME mode = Commands Start CMM_START_CENTROIDS 1st sync USB frame Data Request CMM_SEND_CENTROID_FRAME next sync USB frame Stop CMM_STOP_CENTROIDS Internal Profiling = 1, acqSync = 0 firmware timing flags Internal Updated Value Determined by Value(s) by counter(s) Camera 0 Match to Host vSyncFrame H Host USB SOF Sync requested sync vSyncFrame L request & registers Frame setNextSync( ) Camera 1 Interpolated sync0SofCnt Sync 0 in sync1DelayCnt Sync between SOF successive Camera interrupt 0 syncs routine Data Centroid Data for each camera on appropriate sync. Host Timing does not send sync1 but must match encoder value to camera 1 data when received 7.1.4 USB Sync

This mode is intended for use when scanning at constant frequency is required eg to replace a conventional CCD camera running at the line frequency. In this case the core calculates the required USB sync count directly as a multiple of the 1 ms USB frame count and sets this in the RESET_SYNC_FRAME command. Any encoder modules are used for position readback only. The frequency of operation is limited to discrete frequencies at 1/(ms integer) intervals—50 Hz, 52.63 Hz, 55.56 Hz, 58.82 Hz, 62.5 Hz etc System Timing Mode Description Name USB Sync Description Host sets desired frequency in integer ms intervals, and syncs all devices to same USB frame at setup. Devices generate their own sync signals based on this setup. Useage Fixed frequency scanning Purpose Cmd Data USB Setup RESET_SYNC_FRAME syncCfgData Commands Start CMM_START_CENTROIDS Data Request automatic Stop CMM_STOP_CENTROIDS Internal Profiling = 1, acqSync = 1 firmware timing flags Internal Updated Value Determined by Value(s) by counter(s) Camera 0 Match to elapsed currentFrame syncCfgData fixedSync0Cnt Sync ms interval after Milliseconds copied previous sync 0 to fixedSync0Cnt Camera 1 Match to elapsed sync1Fixed =fixedSync0Cnt sync1DelayCnt Sync ms interval after DelayVal previous sync 0 Data Centroid Data from alternating cameras provided each Timing requested sync interval. Host matches data to appropriate USB frame stamped encoder readings 8 Encoder/Tachometer Module Overview

Hydra USB™ supports a generic encoder device which can take several forms:

-   -   Single channel         -   Single quad input         -   Dual tachometer/reset input     -   MultiChannel         -   6 channel quad input

Application specific configuration will be supplied with each device type as required. However, all encoder type devices follow the same generic timing/trigger configuration format as described below.

Configuration Encoder Configuration Parameter Units Range Comment Trigger — USB_VAR Internal trigger at rate ramped up/dwn between MinTrig(ms)and MaxTrig(ms). Changes every 250 ms +/− 1 below 64 ms, +/− 20 ms above 64 ms USB_CONST Constant internal trigger at USBSyncTrigFC(ms) interval EXTERNAL External hardware trigger signal MANUAL As requested from user - see Tachometer/Encoder view window MinTrig(ms) ms 2-255 Minimum time between triggers MinTrig(ms) ms MinTrig(ms) + Max time between triggers - 2-2000 Encoder always responds after this time if no trigger received USBSyncTrigFC ms 2-255 Constant internal trigger (ms) interval - Locked to USB 1 ms Frame clock USBSyncOffFC 10 μs 0-100 Offset within a single USB Frame for precise timing. Encoder module does not use this parameter any more, it is ignored. 9 Rail Scan Test Client Overview

The Rail Scan Test Client (RSTestClient.exe) is available for demonstration of remote client access to the Host system.

The Host system is configured for rail profiling with two sensor heads, and a tachometer input at one foot intervals.

The system can be operated without connection of an external tachometer using the internal test modes of the tachometer module. This is useful for static testing.

System Configuration

The system is nominally configured as follows: Sensor Configuration Parameter Units Value Comment WOI X Pixels 300 WOI Y Lines 20 WOI Width Pixels 288 WOI Height Lines 440 Sub Lines — 2 Laser 0 Binary ON Laser 1 Binary ON Laser Phase Binary EVEN Frame Rate Hz 125 Exposure μsec 3500 Gain — 10 Compander Binary OFF Auto Binary OFF Threshold Threshold Grey 30 level Reject Binary ENABLED Feature Max Feature pixel 32 Width B&W Filter Binary DISABLED Black Pixel pixel INACTIVE width White Pixel pixel THREE width Test Mode decimal 0

Encoder Configuration Parameter Units Value Comment Trigger — USB_VAR Variable rate - 8-2000 ms MinTrig(ms) ms 8 MaxTrig(ms) ms 2000 USBSyncTrigFC ms 20 (ms) USBSyncOffFC ms 0 (ms) Operation

To start RSTestClient:

-   -   1. Power up system.     -   2. Start Core.     -   3. Start HydraUsbDiag.     -   4. Connect in HydraUsbDiag.     -   5. Display the Encoder config & set the Trigger source &         appropriate parameters & Write them to the Encoder.     -   6. Ensure sync mode is set appropriately in HydraUSB.ini     -   7. Ensure that the Encoder & 2 head's S/Ns are in HUPRS.ini.         Encoder S/N refers to the S/N of the HUE TACH as it appears in         HydraUsbDiag. NOTE: The S/N of the HUE TACH is different than         the S/N of the Power Junction Box.     -   8. Select the Ensco Railscan converter from the pull down menu         in HydraUsbDiag.     -   9. Launch the converter from HydraUsbDiag.     -   10. Start the RSTestClient.     -   11. Connect in RSTestClient.     -   12. Go online in RSTestClient.     -   13. Poll Profile in HydraUsbDiag.

The client test screen appears as shown in FIG. 29. As the client is taken offline, the last NNNN profiles are automatically dumped to *.prf files in the bin directory. NNNN is set in RSTestClient.ini. Note that these files are overwritten on each Offline request.

The Tachometer operation can also be viewed by selecting Tachometer from the Diagnostic GUI—View menu (see FIG. 30).

Set Up Optimisation

This is a guide to optimising the camera parameters, although given the variety of reflective surfaces and angles presented to the camera(s) this is really a compromise in all but the most stable and uniform target applications.

General Principles

-   -   The laser line should occupy a width of 6 to 16 pixels above the         threshold     -   width <6 does not provide best accuracy     -   width >16 looses resolution perpendicular to the line     -   This width is set by choice of optics, field of view, and laser         assembly—ie fixed out of the users control.—except if the peak         is blooming.     -   The threshold should be set to 20% above the general background         and typically should be >than or equal to the level of isolated         background pockets. The centroid logic will automatically pick         the highest peak if more than one exists     -   The exposure should be set to the maximum for the application to         minimise the effect of speckle. The maximum value is based on         the following considerations:         -   Sample rate required−exposure+frame readout must be less             than a value         -   ‘Long’ exposures smear the data acquisition over a distance             if the part or sensor is moving         -   ‘Long’ exposures may produce too much exposure of the array     -   The Gain should then be adjusted to provide a laser line width         close to 6 for detail work and close to 16 pixels for least         noise consistent with:         -   No more than 5% of the laser line showing saturation—values             >230         -   Typical values for the laser line peak pixel level in the             range 60 to 160         -   Background levels <16 unless there is significant ambient             interfering illumination—sunlight or incandescents             Set Up Procedure

-   set up as above and then acquire video—     -   look for highlights/flare/interior corners causing problems     -   look for background levels that can be caused by ambient lights         that can be masked/turned off     -   Poll centroids—noise—temporal jitter—should be <+/−¾ pixel. Any         higher indicates a problem     -   Look for full coverage of the part in question—increase exposure         (and then gain if necessary) to sacrifice accuracy in the         highlights to acquire ‘shadows’ that are important     -   Move the part further out in the field of view to minimise         dynamic range in the image

When satisfactory performance is achieved, Write settings to INI file.

10 Installation

This section describes all files and Windows registry entries required by the Hydra USB™ Foundation Set software. Because of the configurable nature of the Hydra USB™ hardware and software, some details may differ from one system to another. Also, since the system provides a great deal of flexibility, many of the elements may be “rearranged” for various reasons.

This section has been superceded (Rev 1.9) by the automated installation program for the Hydra USB™ system described in section 2.

Files

The Hydra USB™ Foundation Set requires the following directories and files:

10.1.1 c:\3dm\sys

This directory contains various system-level components like device drivers, device driver information files and controller binaries. It contains the following files:

12. UsbLaunchnew.inf

Contains the driver setup information for the Hydra USB™ bootstrap driver.

13. UsbLaunch.sys

Contains the PC code for the Hydra USB™ bootstrap driver. This driver is responsible for downloading the firmware to the device.

14. xxxxx.hex

Contains the microcontroller code for the Hydra USB™ device. Note that the actual version of this code may depend upon the exact Hydra USB™ configuration.

15. THydraUSBDriver.inf

Contains the driver setup information for the main Hydra USB™ driver itself.

16. HydraUSB.sys

Contains the PC code for the main Hydra USB™ driver.

10.1.2 c:\3dm\bin

This directory contains applications which support the Hydra USB™ system. It contains the following files:

17. HydraUSBDiag.exe

Contains the code for the Hydra USB™ diagnostic program.

18. HydraUSBDiag.hlp

Contains the help information for the Hydra USB™ diagnostic program.

19. HydraUSBDiag.cnt

Contains the contents for the Hydra USB™ diagnostic help.

20. Core.exe

The Hydra USB Core module. This module interfaces between an IP port and the actual Hydra USB™ devices, using the Device and Converter DLLs. This file may be run either in the command prompt or as a service.

21. Dev_?.dll

A Hydra USB™ device support DLL. More than one of these may exist on a single system.

22. Conv_?.dll

A Hydra USB™ converter DLL. More than one of these may exist on a single system.

23. CoreSvcInst.exe

The Core Service Installer and Monitor. This program will install and monitor the operation of the Core when it is run as a service.

10.1.3 c:\3dm\HydraUSB\Calib

This directory contains various calibration information for the Hydra USB™ system. It contains the following files:

24. HusbCam_xxxx_n.lut.bin

Contains the lookup table (LUT) for a Hydra USB™ camera, where “xxxx” is the camera serial number and “n” is the camera number on the device. There is one LUT for each camera in the system, i.e., a one head, two camera system with serial number 1234 would have the files HusbCam_(—)1234_(—)0.lut.bin and HusbCam_(—)1234_(—)1.lut.bin.

10.1.4 c:\3dm\doc

This directory contains various documentation for the Hydra USB Hydra USB™ system. It contains the following files:

25. 2138.pdf

The Hydra USB™ reference manual, in Adobe Acrobat format.

10.1.5 c:\winnt

This directory contains .ini files which control various aspects of the system operation. The following files belong to HydraUSB:

26. HydraUSB.ini

Contains various parameters relating to the Hydra USB™ system as a whole.

27. HydraUSBDiag.ini

Contains parameters relating to the Hydra USB™ diagnostic program.

10.1.6 c:\winnt\system32

Contains. DLLs used on a system-wide basis. The Hydra USB™ system requires the following items:

28. mshflxgd.ocx

The Microsoft FlexGrid ActiveX control. Used by the Hydra USB™ diagnostic to display property settings. Note that this control must be registered using Regsvr32 or the equivalent internal OLE mechanisms.

29. mfc42.dll, msvcrt.dll, msvcp60.dll

Runtime support DLLs for Microsoft Visual C++.

Registry Entries

The system requires the following registry entries.

10.1.7 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBLaunch

This key contains information which allows the system to load the device firmware and to load the appropriate device driver once the firmware is in place. This key contains the following items:

30. Type

This is a DWORD key which contains 0x00000001.

31. Start

This is a DWORD key which contains 0x00000003.

32. Error Control

This is a DWORD key which contains 0x00000003.

33. ImagePath

This is a UNICODE character string which contains the path to the USB Launch driver (System32\DRIVERS\UsbLaunch.sys).

34. DisplayName

Contains the string “Hydra Usb Launch Driver”.

35. Hex File Load Result

A DWORD key which contains 0x00000000

36. Hex File Load Error String

Contains the string “Launch Successful”.

37. Hex File

Contains the string “c:\dontdownloadscan3.hex”.

10.1.8 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBLaunch\Enum

Contains an enumeration of the devices supported. This key contains the following items:

38. Count

A DWORD key which contains 0x00000003 (the number of items enumerated).

39. NextInstance

A DWORD key which contains 0x00000003.

40. INITSTARTFAILED

A DWORD key which contains 0x00000001.

41. 0

A string which contains “USB\Vid_(—)0547&Pid_(—)2235\\5&28da0f34&0&2”.

42. 1

A string which contains “USB\\Vid_(—)0ba6&Pid_(—)6373\\6&86352c0&0&3”.

43. 2

A string which contains “USB\\Vid_(—)0ba6&Pid_(—)5453\\6&86352c0&0&1”.

10.1.9 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbLaunch\Pid_xxxx&Did_xxxx

One key of this type will exist for each USB product id—device id pair supported by the system. It will contain a single text item named “Hex File” which contains the path to the xxxxx.hex file (see item 11 above.)

10.1.10 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbLaunch\Security

This key contains security information for the USB Launch system. It contains a single binary item named “Security” with the appropriate binary information.

10.1.11 HKEY_LOCAL_MACHINE\SOFTWARE\3dm\Hydra Usb\Core

This key contains information relating to the Hydra USB Core service. It contains the following items:

44. Home

This string item contains the path name for the Core home directory. It contains the value “C:\3dm\Hydra Usb\Core”.

45. Log File

This string key contains the file name for the Core log file. It contains the value “CoreLog.txt”.

46. Log Verbosity

This string item controls the level of information logged by the Core. By default it contains the value “Low”.

47. Socket Port

This DWORD item contains the number of the IP port used by the Core. By default it contains 0x0000138c (5004 decimal).

48. Extensions Directory

This string item contains the path name which contains the device and converter DLLs used by the core. It contains the string “c:\3dm\bin”.

10.1.12 HKEY_LOCAL_MACHINE\SOFTWARE\3dm\Hydra Usb\Core\Converters

This key enumerates the Converter DLL modules installed on the machine. For each converter, this key contains a sub key identified by the converter name. Each such sub key contains the following items:

49. Description

Contains a text description of the converter function, as in “Hydra USB 3DM Profile Converter”.

50. Type

Contains a DWORD describing the type of the converter.

51. Module Name

A string item giving the name of the converter DLL, as in “Conv_HUP3DM.dll”.

52. Serial Number

A DWORD value giving the 3DM part number of the converter.

10.1.13 HKEY_LOCAL_MACHINE\SOFTWARE\3dm\Hydra Usb\Core\Device Types

This key enumerates the device types present on the system. For each device type, this key contains a sub key identified by the USB Product Id—Device Id pair, as in “Pid_(—)4843&Did_(—)0032”. These sub keys contain the following items:

53. Description

A string value giving the description of the device type, as in “Hydra USB CMM probe—2 camera model”.

54. Type

A DWORD value identifying this device class.

10.1.14 HKEY_LOCAL_MACHINE\SOFTWARE\3dm\Hydra Usb\Core\Devices

This key enumerates the devices present on the system. For each device, this key contains a sub key identified by the device id, as in “ID_(—)6163”. These sub keys contain the following items:

55. Type

A DWORD value giving the class of the device. See section 51.

56. LUT_n

A string value giving the path to the LUT for the Nth camera on the device, as in “c:\\3dm\\HydraUsb\\calib\\HusbCam_(—)6163_(—)0_lut.bin”. There will be one entry of this form for each camera on the device. See section 21. 

1. A method for measuring the range to multiple points on a surface comprising the steps of: projecting a line of light onto the surface imaging said line of light onto an XY photodetector array at an oblique angle means to read out the array one line at a time computing the centroid of said line of light on each Y line across X columns as each line is read out of the array in onboard FPGA (Field Programmable Gate Array) or similar real time logic computing quality factors for each computed centroid and encoding this as one or more bits in the centroid value transmitting said tagged centroid to a local or remote data receiver computing the range to the surface for each point corresponding to each centroid using a previous calibration step
 2. A method according to claim 1 wherein: the FPGA logic rejects spurious lines of light that are narrower or wider than a user specified number of pixels
 3. A method according to claim 1 wherein: the FPGA logic applies a threshold calculated as follows: auto set
 4. A method according to claim 1 wherein: the FPGA logic calculates the centroid according to a modified version of the technique discussed in U.S. Pat. No. 4,628,469, and adds a tag to the centroid data.
 5. A method according to claim 1 wherein: the centroid tag indicates the quality of the centroid calculation according to user specified criteria
 6. A method according to claim 1 wherein: the centroid tag corresponds to exposure
 7. A method according to claim 1 wherein: the centroid tag values are used to adjust the exposure for the next scan
 8. A method according to claim 6 wherein: mutiple exposures are taken and the centroid tag is used to accept or reject the point data from the point cloud assembly
 9. A method according to claim 1 wherein: the centroid tag provides feedback to the user
 10. A method according to claim 1 wherein: the system automatically uses a range of exposures to expose successive scans
 11. A method according to claim 10 wherein: the centroid tags are used to automatically adjust the position of the range of exposures
 12. A method according to claim 1 wherein: One or more artifacts of known size are positioned at fixed locations in the field of view of the sensor(s) and are scanned on every scan. A sensor is defined as a subassembly comprising at least one laserline and one camera with support electronics arranged as a triangulation device. Sensors may share the same laserplane.
 13. A method according to claim 12 wherein: The measurement data from the scanned artifact is used to correct for any change in position or geometry of the sensor with respect to the fixed location of the artifact(s).
 14. A method according to claim 1 wherein: One or more artifacts of known size are positioned at locations in the field of view of the sensor(s) and are scanned on every scan. These artifacts are fixed in position with respect to the object being scanned
 15. A method according to claim 14 wherein: The measurement data from the scanned artifact(s) is used as a reference plane on every scan to permit differential measurements between it and the object. 